Nginx使用:反向代理、动静分离

1.背景

将改造好的威高抽奖平台发布3.239公测Linux服务器,方便后续同前端联调。
1> 监控tomcat日志,得知威高抽奖平台已在服务器的8333端口上启动成功;
2> 但3.239公测Linux服务器,对外网只开放了Nginx 80端口
3> 所以需要将威高抽奖平台,配置Nginx反向代理才能访问。
4> 另外将项目之前OSS存储图片的方案,改造为服务器本地存储 且 图片访问使用Nginx动静分离

2.使用细节

2.1 Nginx反向代理

在服务器的/usr/local/nginx/nginx/conf/nginx.conf文件中,添加如下配置:

        # 威高抽奖平台-反向代理配置
        location /luck-main {
                add_header 'Access-Control-Allow-Origin' $http_origin;
                add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
                add_header 'Access-Control-Allow-Headers' '*';
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header REMOTE-HOST $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                # 核心配置
                proxy_pass http://127.0.0.1:8333/luck-main;
        }

说明:

  1. 使用whereis nginx命令,查找Nginx在服务器上的安装目录;
  2. nginx.conf文件修改后,要使用/usr/local/nginx/nginx/sbin -s reload命令重启nginx使得最新的配置生效;
  3. 使用curl命令,逆向验证项目首页是否可正常访问到
    curl http://127.0.0.1:8333/luck-main/login.html

2.2 Nginx映射图片目录


验证:

  1. 放置一张图片,即/mnt/luck-main-img/jaden/6688.jpg
  2. 浏览器访问:http://malltestv2.59wanmei.com/luck-main-img/jaden/6688.jpg,就能看到对应的图片内容,说明配置成功。

说明:

  1. Nginx映射图片的另一种配置方案:根据访问路径中是否含有图片后缀名.jpg等来映射,具体配置如下:
   # 匹配范围过大,未采用
    location ~* \.(gif|jpg|png|jpeg)$ {
                root /mnt/luck-main/upload;
    }
  1. 本地window操作系统,验证Nginx图片映射,目录斜杠和反斜杠配置注意:
        location /luck-main-img/ {
            #若写为D:\mnt\ nginx启动报错    
            root D:/mnt/; 
        }
  1. Nginx报错细节,可在/usr/local/nginx/nginx/logs/error.log文件中进行查看;
  2. 访问Nginx映射的图片报403 Forbidden,提示这个说明Nginx可正常解析请求,但当前请求访问权限不够。
    后来定位问题得知是启动用户和nginx工作用户不一致所致,将nginx.conf中的user nobody改为user root,然后重启下Nginx即可正常访问图片了。

2.3 URL末尾不加斜杠Nginx 301重定向

点餐正式环境,运营位配置具体餐厅链接,跳转过程中https变为http。导致微信小程序宿主环境打不开。

[具体餐厅-改进前]
https://xxx/mb?campusId=4&areaplaceid=5&dctoken=xxx---异常
[具体档口]
https://xxx/mb/pages/subcontract/food/index?windowid=2&dctoken=xxx---正常
[默认主页]
https://xxx/mb/?dctoken=xxx---正常

后来排查得知,具体餐厅URL末尾没加斜杠,Nginx默认自动加上/ 多一个301跳转,从而导致SLB的https请求变为了http。

[具体餐厅-改进后]
https://xxx/mb/?campusId=4&areaplaceid=5&dctoken=xxx---正常

3. 文章参考

1.Nginx配置文件nginx.conf详解-194赞
2.linux下nginx配置访问静态图片的解决办法
3.访问Nginx图片映射403 Forbidden
4.Nginx在URL末尾不加斜杠的301重定向

你可能感兴趣的:(Nginx使用:反向代理、动静分离)