nginx 如何反代一个含有 /index.php 的站点呢?

2015-04-03 13:00:08 +08:00
 xiaolvmu
假设有一个站点: http://example.com/index.php/en
但是只有访问 example.com 时,会跳转到 http://example.com/index.php/en。直接访问ip得到的是空的页面。
这时如此配置虚拟主机:
server {
server_name......
}
location ^~ /index.php/en {
proxy_pass http://example.com;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

打开反代的网页时,却出现 Welcome to Nginx。
这是什么原因呢?
3939 次点击
所在节点    问与答
7 条回复
futursolo
2015-04-03 13:16:08 +08:00
server {
listen 80;
listen [::]:80;
server_name etc;
location / {
proxy_pass http://1.2.3.4/;
proxy_redirect default;
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_set_header User-Agent $http_user_agent;
proxy_set_header Via-Proxy "true";
}
}

把nginx.conf写成这样就行了。
xiaolvmu
2015-04-03 14:11:24 +08:00
感谢 @futursolo ~
不过这样设置之后......网页成了空白。
配置的目的是反代 mikhei777.org.ua (一个rom发布站点,可是除了美国,其他地方都访问不畅,可我的代理又是新加坡的.....所以想到反代这个站点) 到 mikhei.ecake.in

当前的配置文件是这样的:

#原网站是没有https的,这里使用了HSTS;但经过错误排查,使用 http 依然无效,网页呈现空白。
server {
listen 80;
listen 443 ssl spdy;
server_name mikhei.ecake.in;
#ssl on;

ssl_certificate /etc/pki/mk/mk.crt;
ssl_certificate_key /etc/pki/mk/mk.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers CHACHA20:AES128:AES256:GCM:!DH:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
add_header Strict-Transport-Security "max-age=31536000; preload";
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
server_tokens off;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Alternate-Protocol 443:npn-spdy/3.1;

# Redirect All HTTP Traffic to SSL
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}

# Reverse Proxy Start
location / {
proxy_pass http://82.117.232.5;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header User-Agent $http_user_agent;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Via-Proxy "true";
}
}

问题应是出在 location 字段,正在错误排查当中。这个网页跳转好奇怪呀。
futursolo
2015-04-03 14:22:58 +08:00
@xiaolvmu
原因还是那一行哟!

proxy_pass http://mikhei777.org.ua;
proxy_set_header Host "mikhei777.org.ua";

这样就可以了哦!

另外,反代其他人的站点的时候建议除去这几行:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Via-Proxy "true";

再另外,建议先取得所有者的许可再去反代,否则所有者可能会生气的!
xiaolvmu
2015-04-03 14:32:38 +08:00
@futursolo 好吧.....原来是我理解错了呢。
感谢你的提醒哦~
已经设置成功了: https://mikhei.ecake.in/index.php/ru/
打算系统地学习一下nginx的反代和 load balancing......
jianghu52
2015-04-03 14:32:47 +08:00
@futursolo 去掉这几行不会暴露IP么?
futursolo
2015-04-03 14:36:00 +08:00
@jianghu52
这样反而会让人知道你在用Proxy吧。。。
如果是偶去配置服务器,偶一定不会用这两个字段来发IP给后端。
而且反正看Log就会看得到。
jianghu52
2015-04-03 14:39:15 +08:00
@futursolo 受教了。谢谢。

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

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

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

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

© 2021 V2EX