3

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

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

/app1
/app2

Where/app1为 提供内容domain1.com/app2为 提供内容domain2.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 配置,以展示实现此目标的安全有效的方法。

4

1 回答 1

3

基于这个答案,这里的配置似乎可以按需要工作。

对于app1运行http://localhost:8000/app1_path

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;
    }
}

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

于 2012-09-17T18:00:02.943 回答