1.19 nginx的location配置php
安装第三方模块echo-nginx-modulehtml
git clone https://github.com/openresty/echo-nginx-module.git ./configure --prefix=/usr/local/nginx --add-module=/path/to/echo-nginx-module
安装echo模块操做:前端
cd /usr/local/src/nginx-1.8.0/ ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/echo-nginx-module make && make install /etc/init.d/nginx restart # nginx -V nginx version: nginx/1.8.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) configure arguments: --prefix=/usr/local/nginx --add-module=/usr/local/src/echo-nginx-module
配置写法:linux
server { listen 80; server_name 2.com; root /data/t-nginx/2.com; location /abc/ { echo 123; } }
效果 访问/abc/要输出echo的信息nginx
curl -x127.0.0.1:80 2.com/abc/1111 123
location语法git
location [=|^~|~|~*] /uri/ { …. }
https://coding.net/u/aminglinux/p/nginx/git/blob/master/location/ruler.md github
location优先级及案例web
= 高于 ^~ 高于 ~* 等于 ~ 高于 /vim
http://coding.net/u/aminglinux/p/nginx/git/blob/master/location/priority.md 后端
场景比较:/与~*
server { listen 80; server_name 2.com; root /data/t-nginx/2.com; location /abc/ { echo "/"; } location ~* abc { echo "~*"; } }
效果:
当匹配到 location /abc/的时候,输出/
当匹配到 location ~* abc的时候,输出~*
测试访问:
curl -x127.0.0.1:80 2.com/abc/1111 ~*
实验证实,一样的场景~*比/的优先级要高。
场景比较:~与~*
当这2个同时存在,会匹配最早出现的location语法。
场景比较:= 与 ^~
vim 2.com.conf server { listen 80; server_name 2.com; root /data/t-nginx/2.com; location ^~ abc { echo "^~"; } location = "/abc/1.php" { echo "="; } } # curl -x127.0.0.1:80 2.com/abc/1.php =
实验证实,一样的场景,=比^~的优先级要高。
规则示例
location = "/12.jpg" { ... }
如:
www.aminglinux.com/12.jpg 匹配 www.aminglinux.com/abc/12.jpg 不匹配
不匹配缘由:由于“=”是精准匹配
location ^~ "/abc/" { ... }
如:
www.aminglinux.com/abc/123.html 匹配 www.aminglinux.com/a/abc/123.jpg 不匹配
不匹配缘由:由于是以"/abc/"开头并匹配
location ~ "png" { ... }
如:
www.aminglinux.com/aaa/bbb/ccc/123.png 匹配 www.aminglinux.com/aaa/png/123.html 匹配
都匹配:~匹配"png"便可
location ~* "png" { ... }
如:
www.aminglinux.com/aaa/bbb/ccc/123.PNG 匹配 www.aminglinux.com/aaa/png/123.html 匹配
都匹配:由于不区分大小写匹配,因此有"png"都会匹配
location /admin/ { ... }
如:
www.aminglinux.com/admin/aaa/1.php 匹配 www.aminglinux.com/123/admin/1.php 不匹配
不匹配缘由:由于是匹配uri后/admin/的开头,so第二个不配。
1.20 nginx正向代理
示意图
https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/pic.md
Nginx正向代理
https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/z_proxy.md
正向代理:
用户和代理服务器在同一个内网环境里,代理服务器帮用户去访问用户访问不到的web server
Nginx正向代理配置文件
server { listen 80 default_server; resolver 119.29.29.29; location / { proxy_pass http://$host$request_uri; } }
解释:
正向代理配置文件必定要设default_server;
resolver 119.29.29.29; 解释dns,这个dns能解析全部公网web,除了被大陆防火墙屏蔽掉的(Facebook,Instagram...)
访问测试:
curl 外网
curl -x127.0.0.1:80 外网
1.21 Nginx反向代理
https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/f_proxy.md
配置反向代理:
条件:
1 须要代理的server_name
2 server_name的IP或者ip:port
80代理90的域名配置以下:
server { listen 80; server_name www.test.com; location / { proxy_pass http://127.0.0.1:90/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
90被代理的虚拟主机配置:
server { listen 90 default_server; server_name www.test.com; root /data/t-nginx/test.com/; index index.html ; } mkdir -p /data/t-nginx/test.com echo "test.com_90" > /data/t-nginx/test.com/index.html
访问测试:
# curl -x127.0.0.1:90 www.test.com test.com_90 # curl 127.0.0.1:90 test.com_90
访问ip:port和从90端口访问都是同样。
场景:访问test.com下,一个是default_server,另外一个不是,区别输出结果
[root@AliKvn vhost]# cat test.com.conf server { listen 90 ; server_name www.test.com; root /data/t-nginx/test.com/; index index.html ; } [root@AliKvn vhost]#test.com-90-default.conf server { listen 90 default_server; #server_name www.test.com; root /data/t-nginx/test.com/; index index.html ; location / { echo "90 default"; } }
访问测试:
#curl 127.0.0.1:90 90 default # curl -x127.0.0.1:90 www.test.com test.com_90 # curl -x127.0.0.1:80 www.test.com test.com_90
当利用80端口去访问 www.test.com的时候,跟利用90端口去访问www.test.com是同样的,证实反向代理已经配置成功了。
当proxy_pass 后面接的是域名的话,域名须要在本机hosts解析。
proxy_set_header 的Host $host 是对应的,区分为前端和后端地址。
1.23 nginx反向代理——proxy_pass
无论什么状况下,proxy_pass的地址,最后最好都加上/
proxy_set_header用来设定被代理服务器接收到的header信息。
语法:proxy_set_header field value;
field为要更改的项目,也能够理解为变量的名字,好比host
value为变量的值
若是不设置proxy_set_header,则默认host的值为proxy_pass后面跟的那个域名或者IP(通常写IP),
好比示例4,请求到后端的服务器上时,完整请求uri为:http://192.168.1.10/linux/a.html
若是设置proxy_set_header,如 proxy_set_header host $host;
好比示例4,请求到后端的服务器完整uri为:http://www.aminglinux.com/linux/a.html
proxy_set_header X-Real-IP $remote_addr;和proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
用来设置被代理端接收到的远程客户端IP,若是不设置,则header信息中并不会透传远程真实客户端的IP地址。
$remote_addr 远程客户端的IP地址
$proxy_add_x_forwarded_for 记录代理的IP地址,远程真实客户端的IP地址,
例如A-->B-->C-->他们的角色分别是,客户端、反向代理服务器、真实web服务器。那么A的地址就是$proxy_add_x_forwarded_for 所记录的。
能够用以下示例来测试:
示例6(被代理端)
server{ listen 8080; server_name www.aminglinux.com; root /tmp/123.com_8080; index index.html; location /linux/ { echo "$host"; echo $remote_addr; echo $proxy_add_x_forwarded_for; } }
示例7(代理服务器上)
server { listen 80; server_name www.aminglinux.com; location /aming/ { proxy_pass http://192.168.1.10:8080/linux/; proxy_set_header host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
1.24 Nginx反向代理 proxy_redirect
该指令用来修改被代理服务器返回的响应头中的Location头域和“refresh”头域。
语法结构为:
proxy_redirect redirect replacement; proxy_redirect default; proxy_redirect off;
示例8:
server { listen 80; server_name www.aminglinux.com; index index.html; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
当请求的连接为 http://www.aminglinux.com/aming
结果会返回301,定向到了 http://www.aminglinux.com:8080/aming/
注意:返回301有几个先决条件
1. location后面必须是/;
2. proxy_pass后面的URL不能加uri,只能是IP或者IP:port结尾,并不能以/结尾;
3. 访问的uri必须是一个真实存在的目录,如,这里的aming必须是存在的
4. 访问的时候,不能以/结尾,只能是 www.aminglinux.com/aming
虽然,这4个条件挺苛刻,但确实会遇到相似的请求。解决方法是,加一行proxy_redirect http://$host:8080/ /;
示例9:
server { listen 80; server_name www.aminglinux.com; index index.html; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header host $host; proxy_redirect http://$host:8080/ /; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
nginx反向代理——proxy_pass
管什么状况下,最好都加上/
缓冲和缓存 https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/bu_ca.md
Nginx负载均衡
https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/lb.md