使用Nginx作为多个服务器的反向代理

我正在尝试将nginxconfiguration为我局域网上多个服务器的反向代理。 他们应该在我的广域网上用不同的子域名出去。 我的configuration如下所示:

@ReverseProxy:/etc/nginx/sites-enabled$ cat reverseproxy server { server_name DOMAIN.eu; # app1 reverse proxy follow proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://10.0.2.5:80; } server { server_name Subdomain.domain.eu; # app2 reverse proxy settings follow proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://10.0.2.33:80; } 

但我得到这个错误,不能得到任何进一步….

 @ReverseProxy:/etc/nginx/sites-enabled$ nginx -t nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied) 2009/01/04 12:22:13 [warn] 1302#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1 2009/01/04 12:22:13 [emerg] 1302#0: "proxy_pass" directive is not allowed here in /etc/nginx/sites-enabled/reverseproxy:8 

nginx:configuration文件/etc/nginx/nginx.conftesting失败

你的问题是你正在server块内使用proxy_pass ,这是不允许的。 尝试使用:

 server { server_name Subdomain.domain.eu; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://10.0.2.33:80; } } 

在你的server块内。 代理选项不能在server级别设置,如nginx文档所告知的。

日志中的其他问题的发生是因为你以某种方式作为普通用户启动nginx,尽pipe它应该以root身份启动。

这个线程解决了我的问题,但我认为这将是有用的其他人有一个完整的configuration来看。 以下configuration将反向代理主机名app1.local和app2.local,其中app1被转发到侦听端口3300的另一个应用程序,并且app2被转发到监听端口3000的另一个应用程序。它位于文件/etc/nginx/sites-available/two-applications.conf

 server { server_name app1.local; location ~ { proxy_pass_header Authorization; proxy_pass http://localhost:3300; 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_http_version 1.1; proxy_set_header Connection ""; proxy_buffering off; client_max_body_size 0; proxy_read_timeout 36000s; proxy_redirect off; } } server { server_name app2.local; location ~ { proxy_pass_header Authorization; proxy_pass http://localhost:3000; 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_http_version 1.1; proxy_set_header Connection ""; proxy_buffering off; client_max_body_size 0; proxy_read_timeout 36000s; proxy_redirect off; } } 

另外,这些主机名是由/etc/hosts组成的,需要它们的工作方式如下:

 127.0.0.1 app1.local 127.0.0.1 app2.local 

为了完整性(如Ubuntu Linux上的设置),该文件位于/etc/nginx/sites-available/two-applications.conf ,并被链接到/etc/nginx/sites-enabled/two-applications.conf文件名和符号链接名称当然可以是任何东西。 在更新运行的sudo service nginx reload之后, sudo service nginx reload将会接受更改。