V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
imkh
V2EX  ›  Linux

Nginx 反向代理问题,求解答

  •  
  •   imkh · 2016-08-31 18:04:26 +08:00 · 2338 次点击
    这是一个创建于 2799 天前的主题,其中的信息可能已经有所发展或是发生改变。

    搭建了 mesos+marathon 的环境,直接访问 192.168.0.2:5050 ( mesos )和 192.168.0.2:8080 ( marathon )是可以的。 但想利用另外一个 IP 实现集中访问,比如 192.168.0.99/mesos , 192.168.0.99/marathon 这种访问方式。 配置了一下,试了下面几种配置方式,但都报 404 错误,

    server {
           listen 80;
           server_name 192.168.0.99;
           location /mesos {
           proxy_set_header X-Real-IP  $remote_addr;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_set_header Host $host;
           proxy_pass http://192.168.0.2:5050;
           }
    
           location /marathon {
           proxy_set_header X-Real-IP  $remote_addr;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_set_header Host $host;
           proxy_pass http://192.168.0.2:8080;
           }
    }
    
    或者
    server {
           listen 80;
           server_name 192.168.0.99;
           location /mesos/(.) {
           proxy_set_header X-Real-IP  $remote_addr;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_set_header Host $host;
           proxy_pass http://192.168.0.2:5050;
           }
    
           location /marathon/(.) {
           proxy_set_header X-Real-IP  $remote_addr;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_set_header Host $host;
           proxy_pass http://192.168.0.2:8080;
           }
    }
    或者
    server {
           listen 80;
           server_name 192.168.0.99;
           location /mesos {
           proxy_set_header X-Real-IP  $remote_addr;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_set_header Host $host;
           proxy_pass http://192.168.0.2:5050/;
           }
    
           location /marathon {
           proxy_set_header X-Real-IP  $remote_addr;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_set_header Host $host;
           proxy_pass http://192.168.0.2:8080/;
           }
    }
    

    实现 192.168.0.99/mesos , 192.168.0.99/marathon 这种访问方式,要如何配置呢?

    8 条回复    2016-08-31 22:55:11 +08:00
    majinjing3
        1
    majinjing3  
       2016-08-31 18:53:38 +08:00 via Android
    proxy_pass 参数可能不对,建议去官方网站看下文档,
    majinjing3
        2
    majinjing3  
       2016-08-31 18:56:37 +08:00 via Android
    majinjing3
        3
    majinjing3  
       2016-08-31 19:06:32 +08:00 via Android   ❤️ 1
    location /mesos/, 8080/,都加上 /
    chenzhiwei
        4
    chenzhiwei  
       2016-08-31 19:10:23 +08:00   ❤️ 1
    ryd994
        5
    ryd994  
       2016-08-31 21:13:40 +08:00   ❤️ 1
    server {
    listen 80;
    server_name 192.168.0.99;

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;

    location /mesos/ {
    proxy_pass http://192.168.0.2:5050/;
    }

    location /marathon/ {
    proxy_pass http://192.168.0.2:8080/;
    }
    }

    原因:
    proxy_pass 不加 / 的话,就会 pass 到 http://192.168.0.2:5050/mesos/...
    proxy_pass 含路径时,会用 pass 里的路径部分,替换 location 的路径部分
    akira
        6
    akira  
       2016-08-31 21:35:47 +08:00
    测试的时候, 可以看下不同参数对应的目标站的访问记录,这样会更清楚
    imkh
        7
    imkh  
    OP
       2016-08-31 22:14:33 +08:00
    @ryd994
    ```
    location /marathon/ {
    proxy_pass http://192.168.0.2:8080/;
    }
    ```
    marathon 这样配置会丢失静态文件,静态文件请求到了 http://192.168.0.99/static/css/mesos.css ,正确路径是 http://192.168.0.99/marathon/static/css/mesos.css ,这个问题要怎样解决?
    imkh
        8
    imkh  
    OP
       2016-08-31 22:55:11 +08:00
    @imkh
    location ~ ^/static/ {
    proxy_pass http://192.168.0.2:8080;
    }
    这样配置就行了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   878 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:43 · PVG 03:43 · LAX 12:43 · JFK 15:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.