我正在尝试将 nginx 配置为 LAN 上多个服务器的反向代理。它们应该通过不同的子域在我的 WAN 上传输。我的配置如下:
@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:配置文件/etc/nginx/nginx.conf 测试失败
答案1
您的问题是您使用了proxy_pass
内部server
块,这是不允许的。请尝试使用:
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 以某种方式以普通用户身份启动,尽管它应该以 身份启动root
。
答案2
这个帖子解决了我的问题,但我认为让其他人看到完整的配置会很有用。以下配置将对主机名 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
将获取更改。