工作中nginx整理
nginx很强大,匹配规则也很丰富。本人对nginx的用法也是一知半解,只能根据实际需求去学习并总结起来。以下是我工作中用到的nginx一些用法整理,前几个还是比较常用的,最后一个就我也是第一次见。
一、配置404页面(针对同一域名不同服务)
针对某个常用活动的域名abc.gdljy.cn,在这个域名下都使用同一个404页面,大家配的多,类似这样子。
/home/ljy/app/nginx/html/mddd_404 下面有一个index.html,然后这个index.html引用同级目录images的一个图片:
<img src="images/404.jpg" width="100%">
如果针对某个活动,假设叫 dg20200918
具体的location匹配某个活动,某个活动自己定义自己的404页面
1 location ^~ /dg20200918 { 2 root /home/gdtc/app/nginx/html; 3 index index.html; 4 error_page 403 404 /dg404; 5 location ~ /dg404 { 6 root /home/gdtc/app/nginx/html; 7 } 8 }
二、nginx跳到指定redirect页面
需求:项目启动开发前,需要给运营同事一个海报地址,然后还要生成一个二维码给他们;我一般那会直接用location匹配一个项目目录,然后项目地址就这样直接发这个给他们了:a.gdljy.cn/dcbg20201013/
location ^~ /dcbg20201013 { root /home/ljy/data; }
然后项目启动后(tomcat跑的),停服务就悲剧了,因为开发人员给的地址是一个项目下叫redirect.html 的页面,不应该是a.gdljy.cn/dcbg20201013/,并且默认是找 index.html 的,找不到就404了。
那怎么办呢,dcbg20201013这个项目地址已经给出去了(海报不是说换就换的,真是一失足成千古恨,泪 = =! ),那么就建一个临时目录呗,用rewrite去实现原目录重写到这个目录下的redirect.html
问题解决:
弄一个临时目录为bg20201013 ,bg20201013变成真正的项目目录,原来的目录变成一个傀儡,仅仅充当一个被重写的地址, tomcat的server.xml也得改,Context path由原来的dcbg20201013改成bg20201013。
1 location ^~ /bg20201013 { 2 proxy_pass http://14.18.102.235:8290; 3 error_page 502 404 /dcbg-404; 4 location ~ /dcbg-404 { 5 root /home/gdtc/app/nginx/html; 6 } 7 ##ip受限页面 8 error_page 403 /dcbg-403; 9 location ~ /dcbg-403 { 10 root /home/gdtc/app/nginx/html; 11 } 12 } 13 #这是原来给出去的二维码地址 14 location ^~ /dcbg20201013 { 15 rewrite ^/(.*)$ https://act.gdlottery.cn/bg20201013/redirect.html permanent; 16 }
三、nginx问题之如何将GET问题转换为POST请求
开发调接口,需要从原来的https://a.gdljy.cn/dg20200918/notification,跳到:
https://a.gdljy.cn/gd20201214/notification,我原来用rewrite写的,发现跟proxy_method一起用是无法生效的,幸好这个proxy_pass也能跳。
1 location ^~ /dg20200918/notification { 2 proxy_method POST; 3 proxy_pass https://a.gdljy.cn/gd20201214/notification; 4 #rewrite ^/(.*)$ https://a.gdljy.cn/gd20201214/notification permanent; 5 }