V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xiaolvmu
V2EX  ›  问与答

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

  •  
  •   xiaolvmu · 2015-04-03 13:00:08 +08:00 via Android · 4147 次点击
    这是一个创建于 3558 天前的主题,其中的信息可能已经有所发展或是发生改变。
    假设有一个站点: 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。
    这是什么原因呢?
    7 条回复    2015-04-03 14:39:15 +08:00
    futursolo
        1
    futursolo  
       2015-04-03 13:16:08 +08:00   ❤️ 2
    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
        2
    xiaolvmu  
    OP
       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
        3
    futursolo  
       2015-04-03 14:22:58 +08:00   ❤️ 1
    @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
        4
    xiaolvmu  
    OP
       2015-04-03 14:32:38 +08:00
    @futursolo 好吧.....原来是我理解错了呢。
    感谢你的提醒哦~
    已经设置成功了: https://mikhei.ecake.in/index.php/ru/
    打算系统地学习一下nginx的反代和 load balancing......
    jianghu52
        5
    jianghu52  
       2015-04-03 14:32:47 +08:00
    @futursolo 去掉这几行不会暴露IP么?
    futursolo
        6
    futursolo  
       2015-04-03 14:36:00 +08:00   ❤️ 2
    @jianghu52
    这样反而会让人知道你在用Proxy吧。。。
    如果是偶去配置服务器,偶一定不会用这两个字段来发IP给后端。
    而且反正看Log就会看得到。
    jianghu52
        7
    jianghu52  
       2015-04-03 14:39:15 +08:00
    @futursolo 受教了。谢谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   948 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:19 · PVG 03:19 · LAX 11:19 · JFK 14:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.