【问题标题】:How to proxy proxy domain name to internal app server URL in Nginx?如何将代理域名代理到 Nginx 中的内部应用服务器 URL?
【发布时间】:2013-12-02 09:34:18
【问题描述】:

我有一个内部应用服务器 (Django+gunicorn) 在私有端口上的 Nginx 反向代理后面运行(例如,侦听端口 5000。)

应用服务器中安装了几个 Django 应用,映射到单独的基本路径。示例:

/app1
/app2

/app1domain1.com 提供内容,/app2domain2.com 提供内容。

我想静默地将特定主机名的传入请求反向代理到相关的后端应用程序,同时保留转发到内部应用程序服务器的路径:

http://domain1.com/foo --> /app1/foo
http://domain1.com/bar/bletch --> /app1/bar/bletch

http://domain2.com/alpha/bravo --> /app2/alpha/bravo

我想你可以说我正在尝试设置一个简单的“虚拟主机”配置,但我想使用一个共享的后端应用服务器实例。

关键点:我不希望访问者的浏览器看到重定向的 URL 结构。因此,当客户端浏览器点击 http://domain1.com/foo 时,会提供正确的内容,但浏览器看不到重定向。

我已经使用 Nginx 完成了一些基本工作(仍在学习),我正在寻找示例 Nginx 配置,以展示实现此目标的安全有效方法。

【问题讨论】:

    标签: django nginx reverse-proxy appserver


    【解决方案1】:

    基于this answer,这是一个似乎可以按预期工作的配置。

    对于在http://localhost:8000/app1_path 上运行的app1

    upstream app1 {
        server 127.0.0.1:8000 fail_timeout=0;
    }
    server {
        listen 80;
        server_name example.com
        access_log /var/log/nginx/example.com.access.log;
        error_log /var/log/nginx/example.com.error.log;
    
        location / {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            rewrite ^(.*)$ /app1_path$1 break;
            proxy_pass http://app1;
        }
    }
    

    因此,对于每个主机名->应用程序/路径对,可以根据需要多次重复此模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-29
      • 2012-10-08
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      相关资源
      最近更新 更多