nginx rewrite
- Nginx提供了全局变量或者自己设置的变量,结合正则表达式和标志位实现url的重写以及重定向,rewrite只能放在server{},location{},if{}中,并且只能对域名后面的除去传递的参数外的字符串起作用。
- rewrite主要的功能就是实现URL的重写,Nginx的Rewrite规则采用PCRE,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前需要编译安装PCRE库
- 通过Rewrite规则,可以实现规范的URL,根据变量来做URL转向以及选择配置
Rewrite全局变量
- nginx的rewrite规则就是使用正则表达式匹配请求的url,然后根据定义的规则进行重写和改变,需要nginx_http_rewrite_module模块来支持url的重写功能,该模块是标准模块,默认已经安装好了
变量 | 含义 |
$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 | 客户端请求的动作,通常为GET或POST。 |
$remote_addr | 客户端的IP地址。 |
$remote_port | 客户端的端口。 |
$remote_user | 已经经过Auth Basic Module验证的用户名。 |
$request_filename | 当前请求的文件路径,由root或alias指令与URI请求生成。 |
$scheme | HTTP方法(如http,https)。 |
$server_protocol | 请求使用的协议,通常是HTTP/1.0或HTTP/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相同。 |
- 举例说明:判断IP地址的来源
## 如果访问的ip地址(用的就是请求头中的remote_addr进行判断的)为192.168.5.165,则返回403
if ($remote_addr = 192.168.5.166) {
return 403;
}
- 限制浏览器的访问(利用正则表达式判断请求头是否满足)
## 不允许谷歌浏览器访问 如果是谷歌浏览器返回500
if ($http_user_agent ~ Chrome) {
return 500;
}
注意:这些语句一般放在server{]中
如:
Linux安装nginx
1.安装gcc gcc-c++(如新环境,未安装请先安装)
$ yum install -y gcc gcc-c++
2.安装wget
$ yum -y install wget
3.安装PCRE库
$ cd /usr/local/
$ wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz
$ tar -zxvf pcre-8.33.tar.gz
$ cd pcre-8.33
$ ./configure
$ make && make install
如果报错:
在 linux 中执行 wget 命令提示 -bash: wget: command not found 解决方法
解决办法 yum -y install wget
5.安装SSL库
$ cd /usr/local/
$ wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz
$ tar -zxvf openssl-1.0.1j.tar.gz
$ cd openssl-1.0.1j
$ ./config
$ make && make install
6.安装zlib库存
$ cd /usr/local/
$ wget http://zlib.net/zlib-1.2.11.tar.gz
$ tar -zxvf zlib-1.2.11.tar.gz
$ cd zlib-1.2.11
$ ./configure
$ make && make install
5.安装nginx
$ cd /usr/local/
$ wget http://nginx.org/download/nginx-1.8.0.tar.gz
$ tar -zxvf nginx-1.8.0.tar.gz
$ cd nginx-1.8.0
$ ./configure --prefix=/opt/nginx
$ make && make install
- 此时安装完毕后,安装好的nginx在/opt/nginx目录中
6.启动nginx
/usr/local/nginx/sbin/nginx
ps -aux | grep ‘nginx’
Linux环境中修改hosts文件
(1)host文件的位置:/etc/hosts
(2)vim /etc/hosts即可编译
Linux环境下常用Nginx的操作
- 查询nginx 进程
ps aux | grep ‘nginx’ - 杀死进程方式关闭nginx
kill -9 2363 - 停止nginx服务器
/opt/nginx-anzhaung/sbin/nginx -s stop - 重启nginx
/opt/nginx-anzhaung/sbin/nginx -s reload - 启动nginx
/opt/nginx-anzhaung/sbin/nginx
Linux环境下配置负载均衡
- 此时我们要做的是在linux环境上搭建nginx服务器,在windows上写程序,让用户在浏览器上的访问先到达linux上的nginx服务器,再由nginx服务器反向代理到windows的本地物理ip上执行程序
- windows上的物理机IP地址是:192.168.0.140
- linux上的地址是:192.168.0.108
- 我们的linux和windows的ip只要是一个网段就可以进行访问,在linux上pingwindows可以ping通就行
- 开始配置:
(1)因为我们访问是从windos上进行访问的,所以host文件是在windos上配置的,但是对应的IP地址是指向linux的 - (2)修改linux上的nginx的配置
###定义上游服务器(需要被nginx真实代理访问的服务器) 默认是轮训机制
upstream backServer{
server 192.168.0.140:8080;
server 192.168.0.140:8081;
}
server {
listen 80;
## 在windos上面配置,并不是在虚拟机中配置,因为客户端是在windows上的,访问是从windows来的,但是指向的linux上得到ip地址
server_name www.xiyou.com;
location / {
### 指定上游服务器负载均衡服务器
proxy_pass http://backServer;
index index.html index.htm;
}
}
外网环境配置Nginx服务器–二级域名
- 如www.baidu.com是一级域名
- 如beikewww.baidu.com是二级域名,只要是自己定义出来的域名就可以称为二级域名(不是www开头的)
- 一般在微服务环境中,我们访问不同微服务其域名也应该是不同的。但是在API开发接口,即接口网关下,我们的域名就必须是相同的,一般是www.apiXXXX.com
- 总结:在互联网公司中,一般以项目拆分域名,比如会员项目,订单项目
会员:http://member.xiyou.com
订单:http://order.xiyou.com
根据域名去区分项目 - 区分域名并不是根据前缀区分的,即www啊什么的,(前缀+域名名称+结尾),一般是根据域名名称+结尾进行区分的。