需求

在服务器中,本地安装又Nginx;通过docker安装了Laravel的开发环境,其中也安装了docker的nginx。通过IP地址和端口号方式可以直接访问docker中的服务器。
因为现在本地安装的nginx默认占用了80端口,并且使用了域名,所以想将docker中的nginx,通过本地nginx的URL区分,进行代理。
本地nginx使用的是https进行访问,而docker中的nginx使用的是Http。

服务器IP地址:12.12.12.12(https://www.xyz.com)(作为例子)
docker nginx映射到本地的端口:9001 (作为例子)

完整配置

先放上完整配置,在ngpic1.jpginx的配置文件中添加location模块。

  1. location /simpledemo/ {
  2. proxy_pass http://127.0.0.1:9001/;
  3. gzip off;
  4. proxy_set_header X-Real-IP $remote_addr
  5. proxy_set_header X-Forwarded-Ssl off;
  6. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  7. # 下边这三句是搭档。
  8. # 第一句,让隐藏的服务器不暴露自己的真实端口。
  9. # 第二句,让服务器返回302,跳转路径自去增加代理的关键字
  10. # 第三句,nginx自动将绝对路径修改,增加代理的关键字,让路径可以找到
  11. proxy_set_header Host $host:9001;
  12. proxy_redirect http://www.xyz.com:9001 https://www.xyz.com/simpledemo;
  13. sub_filter 'http://www.xyz.com:9001' 'https://www.xyz.com/simpledemo';
  14. sub_filter_once off;
  15. }

说明

proxy_pass

http://127.0.0.1:9001/ 最后的斜杠/的作用:

  1. 带斜杠/ 访问http://127.0.0.1:8080/simpledemo/login,相当于访问 http://127.0.0.1:8000/login
  2. 不带斜杠,http://127.0.0.1:8080/simpledemo/login,相当于访问 http://127.0.0.1:8000/simpledemo/login
  3. 由于docker中的服务器没有simpledemo信息,所以在此需要配置 /
  4. 如果要带斜杠/,则 location /simpledemo/ 最好也带上斜杠/

sub_filter

使用一个 sub_filter,可以将原有的输出文本内容修改掉,替换为我们知道的正确的地址。 sub_filter可以配置多条,用以替换很多很多内容,也可以写的很细致。
sub_filter第一个参数是要被替换的,第二个参数是被替换后的。
使用sub_filter可以修改js和css的引用地址,从 http:www.xyz.com:9001 改为https://www.xyz.com/simpledemo

附:

最后附上参考的文章:
https://www.jianshu.com/p/c0d7683e3dbe