Dan*_*aes 9 nginx reverse-proxy
我正在尝试将 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;
}
Run Code Online (Sandbox Code Playgroud)
但是我收到此错误并且无法再进一步....
@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
Run Code Online (Sandbox Code Playgroud)
nginx: 配置文件 /etc/nginx/nginx.conf 测试失败
Ter*_*nen 12
您的问题是您正在使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
在你的server街区内。server正如nginx 文档所述,代理选项不能在级别上设置。
发生日志中的其他问题是因为您以某种方式将 nginx 以普通用户身份启动,尽管它应该以root.
这个线程解决了我的问题,但我认为其他人有一个完整的配置来查看会很有用。以下配置将反向代理主机名 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;
}
}
Run Code Online (Sandbox Code Playgroud)
此外,这些主机名是组成的,需要/etc/hosts如下所示才能使它们工作:
127.0.0.1 app1.local
127.0.0.1 app2.local
Run Code Online (Sandbox Code Playgroud)
为了完整起见(在 Ubuntu Linux 上设置),这个文件存在 并被符号链接/etc/nginx/sites-available/two-applications.conf到/etc/nginx/sites-enabled/two-applications.conf文件名和符号链接名称当然可以是任何东西。更新后,运行sudo service nginx reload将获取更改。
| 归档时间: |
|
| 查看次数: |
56373 次 |
| 最近记录: |