请教关于 Nginx 的 location 配置文件写法。

2019-09-21 16:24:44 +08:00
 Bwoywan

想要实现的功能就是域名目录反代一个 typecho 站点。

例如:https://domain.com/tt/ 反代至本地的 http://127.0.0.1:5622

架构是 LNMP 一键安装包安装的 nginx 和 mysql, php,目前已经有一个 typecho 站点正常运行中。

尝试过几种写法,要么 404 ,要么 url header 会是 127.0.0.1:5622

希望 v 友 能指教一下,感谢。。。

~~想这么做的原因主要是这样就不用申请 ssl 证书了(~~

location /tt/ {                 
proxy_method GET;                                                                                               
proxy_pass_request_headers on;    
proxy_pass_request_body on;                                                                    
proxy_set_header        host    $host;                               
proxy_set_header  X-Real-IP $remote_addr;             
proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
proxy_pass           http://127.0.0.1:5622;
}
server { 
listen 5622;  
server_name 127.0.0.1; 
include enable-php-pathinfo.conf; 
  location / {    
              root /home/wwwroot/typecho/;                                                  
              index index.php,index.html;                                                    
#               if (-f $request_filename/index.html) {                                         
#               rewrite (.*) $1/index.html break;                                              
#               }                                                                             
#               if (-f $request_filename/index.php) {                                          
#               rewrite (.*) $1/index.php;                                                     
#               }                                                                             
#               if (!-f $request_filename)                                                     
#               {                                                                             
#               rewrite (.*) /index.php; }                                                     
      }
1803 次点击
所在节点    问与答
10 条回复
ysoserious
2019-09-21 16:33:16 +08:00
我是这么做的, 局域网里服务器 ip 地址是 192.168.35.9

我就把域名在服务商那里解析到 192.168.35.9

然后 nginx 配置像在公网时候的一样

ssl 用的很舒服
ochatokori
2019-09-21 16:36:16 +08:00
proxy_pass http://127.0.0.1:5622/;
试试看?
MonoLogueChi
2019-09-21 16:52:14 +08:00
如果不是特别低的版本,直接写 /tt 就可以,不需要写 /tt/
不建议指定代理协议,proxy_method 删掉
你把 proxy_pass 写在前面
如果不是必要那些 pass 什么的不要写,默认就好
最后你再确认一下你的路径写的对不对,别忘了还有一层 tt,你的 typecho 的路由也要带上 /tt/
ryd994
2019-09-21 17:03:05 +08:00
1. ochatokori 是对的。
nginx 对于 proxy url 的替换规则是,如果只有 protocol 和 host proxy_pass http://127.0.0.1:5622;
则 path 部分原样传递,也就是 https://domain.com/tt/abc 会到 http://127.0.0.1:5622/tt/abc

如果有 path 部分 proxy_pass http://127.0.0.1:5622/;
则只替换到 location 指定部分的剩余部分 https://domain.com/tt/abc 会到 http://127.0.0.1:5622/abc
多出来的斜杠非常重要

2. url header 的问题靠 proxy_redirect 和 sub_filter 解决
zhuangjia
2019-09-21 17:22:38 +08:00
ochatokori,ryd994 说的对

header 的问题可以先尝试将 proxy_pass 放在配置最上面,然后再 proxy_set_header
Bwoywan
2019-09-21 20:52:29 +08:00
@ryd994 谢谢啦。
但是我现在还是有一个问题无法解决,还是关于 proxy_redirect 和 sub_filter 的用法,我如果 这样写
```
proxy_pass http://127.0.0.1:5622/;
proxy_set_header Host $host;
proxy_redirect http://127.0.0.1:5622/ /tt/;
```
并不会生效,页面中链接仍缺少 /tt/
ryd994
2019-09-22 01:04:44 +08:00
@Bwoywan 页面内容里的链接靠 sub_filter
301/302 目标靠 proxy_redirect
ryd994
2019-09-22 01:08:21 +08:00
@MonoLogueChi
@zhuangjia
指令顺序无关。Nginx 配置是 declarative 的,实际执行顺序由相关模块的处理 stage 决定。同是 proxy 模块就不存在先后顺序。
少数可以重复指定的指令,会有自己的先后顺序。
MonoLogueChi
2019-09-22 12:35:27 +08:00
@ryd994 这里和顺序无关,就是写在后面看着别扭
Bwoywan
2019-09-23 21:11:04 +08:00
@ryd994
@MonoLogueChi
抱歉打扰两位,遇到了我无法解决的问题。
目前前台主页已经正常,但是 登录页 无法登录,
我对比了一下没有反代的登录页,/admin/ 会有一个 301,并且 url 后面会带一个 refer
于是我以为是 refer 的问题,就在 location 里面加入了
proxy_set_header Referer $http_referer;
但是还是无法登陆。
目前的 location 配置如下:
'''
location ^~ /hd/ {
proxy_pass http://127.0.0.1:5623/;
proxy_set_header Host $host;
sub_filter http://$host https://$host/hd;
sub_filter_once off;
proxy_set_header Accept-Encoding "";
proxy_set_header Referer $http_referer;
#proxy_redirect https://domain.com http://127.0.0.1:5623;
'''
反代页是 https://domain.com/hd
并且如果直接输入 https://domain.com/hd/admin 会重定向至 https://domain.com:5623/hd/admin

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/602853

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX