虚拟主机和URL重写

2016-1-15 chenhui Nginx

Nginx 的配置文件路径为 /usr/local/nginx/conf/nginx.conf 

如果我们需要对 Nginx 路径进行重写,那么就要编辑这个配置文件。


这个配置文件下有如下这种格式的内容:


http{
 #虚拟主机1
 server{
  listen       81;
  server_name  www.nginx1.com;
  location / {
     root   html;
     index  index.html index.htm;
  }
 }

 #虚拟主机2
 server{
  listen       80;
  server_name  localhost;
  location / {
     root   html;
     index  index.html index.htm;
  }
 }
}



11

上面这个字段的意思是,有两个虚拟主机(server字段),分别是 www.nginx1.com 和 localhost 两个域名,他们分别监听 81 端口和 80 端口。


location 括号内的 root 表示虚拟主机的网站根目录,index 表示虚拟主机的主文件。

location 后面的斜杠部分存放的是匹配规则,这里的匹配规则有三种写法:

    1. location =x {}  精准匹配

    2. location ~x {} 正则匹配

    3. location x {} 一般匹配

location /{} 属于一般匹配,这表示所有 www.nginx1.com/xxx 的路径都会到这里来(这里的xxx指任何)

location =/x{} 这种精准匹配,则只匹配 www.nginx1.com/x 这个路径


Nginx 也支持 URL 重写,重写语句就写在 server {} 内,示例代码如下:


if ($remote_addr = 192.168.1.100){
	return 403;
}

if ($http_user_agent ~ MSIE){
	
	rewrite ^.*$ /ie.html; // 重写URL到 ie.html
	break;
}


$remote_addr 和 $http_user_agent 是 Nginx 内置的变量,其作用如下:


变量

含义

$args

这个变量等于请求行中的参数,同$query_string

$content length

请求头中的Content-length字段。

$content_type

请求头中的Content-Type字段。

$document_root

当前请求在root指令中指定的值。

$host

请求主机头字段,否则为服务器名称。

$http_user_agent

客户端agent信息

$http_cookie

客户端cookie信息

$limit_rate

这个变量可以限制连接速率。

$request_method

客户端请求的动作,通常为GETPOST

$remote_addr

客户端的IP地址。

$remote_port

客户端的端口。

$remote_user

已经经过Auth Basic Module验证的用户名。

$request_filename

当前请求的文件路径,由rootalias指令与URI请求生成。

$scheme

HTTP方法(如httphttps)。

$server_protocol

请求使用的协议,通常是HTTP/1.0HTTP/1.1

$server_addr

服务器地址,在完成一次系统调用后可以确定这个值。

$server_name

服务器名称。

$server_port

请求到达服务器的端口号。

$request_uri

包含请求参数的原始URI,不包含主机名,如/foo/bar.php?arg=baz”。

$uri

不带请求参数的当前URI$uri不包含主机名,如”/foo/bar.html”。

$document_uri

$uri相同。


发表评论:

Copyright ©2015-2016 freehui All rights reserved