У меня есть одна установка сервера nginx (два файла конфигурации) с двумя установленными и запущенными веб-серверами Gunicorn. Один пулеметчик - производство, другой - постановка.
Я хочу, чтобы nginx обслуживал http-запросы к xyz.com, а также https-запросы к xyz.com на производственный сервер gunicorn @ 127.0.0.1:8000.
Я добился этого с помощью:
server {
listen 80;
server_name xyz.com;
return 301 https://$http_host$request_uri;
}
server {
listen 443 ssl;
server xyz.com;
..... <<< ssl stuff
location /{
.... proxy_stuff
proxy_pass http://127.0.0.1:8000;
}
}
Я также хочу, чтобы трафик http на xyz.com:8080 и трафик https на xyz.com:8080 попадал на промежуточный сервер @ 127.0.0.1:8081. Мне удалось получить https-трафик на xyz.com:8080, работая следующим образом:
server {
listen 8080 ssl;
server_name xyz.com;
...... << ssl stuff
location / {
...... << proxy stuff
proxy_pass http://127.0.0.1:8081;
}
}
Но я не могу найти способ перенаправить http-трафик на xyz.com:8080 на https-трафик на xyz.com:8080. Я пробовал то же перенаправление, что и с портом 80, но безуспешно.
Мог бы использовать какое-то направление.
Основываясь на том, что вы сказали, вы хотите прослушивать http и https на порту 8080, что я не верю в это возможно. Настройте разные серверные блоки для разных портов, с блоком местоположения внутри у вас может быть один и тот же proxy_pass для передачи куда угодно.
Вероятно, это самое близкое к тому, что вы сказали, - прослушивание 8080 http, 8081 https и пересылка с http на https. Переписывание может быть не совсем правильным, но идею вы поняли.
server {
listen 8080; # HTTP
server_name example.com;
rewrite ^ https://example.com:8081$request_uri? redirect;
# rewrite ^ https://example.com:8081 redirect; # Alternate rewrite
}
server {
listen 8081 ssl;
server_name example.com;
// ...... << ssl stuff
location / {
// ...... << proxy stuff to forward to http
proxy_pass http://127.0.0.1:8080;
// If you are not proxying to a service on the same server you can use the line below
// proxy_pass http://example.com:8080;
}
}