Я пытаюсь настроить nginx как обратный прокси для нескольких серверов в моей локальной сети. Они должны выходить в мою 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 не прошел проверку
Ваша проблема в том, что вы используете 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
.
Эта тема решила мою проблему, но я подумал, что другим будет полезно увидеть готовую конфигурацию. Следующая конфигурация будет обратным прокси для имен хостов 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
заберет сдачу.