工作中nginx整理

工作中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 }
View Code

 

 

二、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         }
View Code

 

三、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 }
View Code

 

 四、nginx调参
目前遇到的是设置上传文件大小限制的:
client_max_body_size 1024m;
 
 五、nginx针对单个location加身份认证
也可以对所有虚拟主机进行身份认证(即对所有server生效) ——》 写在主配置文件nginx.conf
或针对单个虚拟主机身份认证 ——》auth_basic 两句写在所有location之外
 
1、安装httpd-tools工具
yum install -y httpd-tools

2、使用htpasswd命令来创建用户

用户:windysai

密码:passwd

htpasswd -bc  /home/ljy/app/nginx/conf/htpasswd/ljy_test/passwd.db  windysai passwd

3、配置nginx虚拟配置文件

location ^~ /ljy_test/manage {
    auth_basic "service";
    auth_basic_user_file /home/ljy/app/nginx/conf/htpasswd/ljy_test/passwd.db;
    proxy_pass http://xxx:端口;
    ...
}

做完这3步重新加载nginx配置文件即可。

另外,第2步和第3步之间有查到说,为了安全性,还需要修改密码文件账户还有修改密码文件权限为600的,有需要大家可以加下。
chown -Rf nginx.nginx passwd.db
chmod 600 passwd.db 

 

 

posted @ 2020-12-11 19:14  windysai  阅读(116)  评论(0编辑  收藏  举报