Смоленск 1.5 [РЕШЕНО] nginx, реверсивный прокси.

azm9s

New member
Сообщения
277
#1
Доброго дня.
Подскажите, точно где то накосячил с настройками конфига:
есть http страница, работающая по 8983 порту.
установил nginx, настроил реверсивный прокси с такими настройками:
server {
listen 8545 ssl;
ssl_certificate "/etc/apache2/ssl/server.crt";
ssl_certificate_key "/etc/apache2/ssl/server.key";
access_log /var/log/nginx/site-access.log;
error_log /var/log/nginx/site.error.log;

location / {
proxy_pass http://127.0.0.1:8983;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;

}

}
вот с такой конфигурацией nginx хотя бы перестал перебрасывать с https на http. но все время при попытке пройти по какой-то ссылке в браузере сбрасывает номер порта на 443.
то есть я прохожу по ссылке https://site:8545/url, а открывается ссылка https://site/url на что идет ругань, что нет соединения. но если указать вручную порт и все ок открывает. и так со всеми ссылками по странице.

p.s. если как прокси выступает apache то проблем таких нету. но он работает только в орле, так как pam не отключается в смоленске.
 

oko

New member
Сообщения
1 257
#2
to azm9s
Первое, что приходит в голову, - отсутствие директивы server_name в приведенном конфиге. Если сайт открывается по DNS-имени, а не по IP-адресу, то это многое бы объяснило...
И я бы наоборот, реверс-прокси на базе NGINX повесил на 80 и 443, а веб-сервер (Apache2?) на иные порты высшего диапазона. Если, конечно, это все крутится на одной машине...
 

azm9s

New member
Сообщения
277
#3
1. досконально конфиг не помню. Вполне возможно что и server_name отсутствует.
2. ни nginx, ни сама страница html НЕ должны работать на 80\443 порту.
3. все крутится на одной машине:
http страница - просто http urllib скрипт на питоне, отрабатывающий нужные функции... - backend по сути является :) работает на порту 8983
https nginx сервер - реверсивный прокси на http страницу, но с включением ssl. работает на порту 8545. работает действительно на этом порту.
но любое обращение в браузере почему-то убирает порт из ссылки. (у апача такого нет)
 

azm9s

New member
Сообщения
277
#4
и так:
server_name есть.
весь конфиг такой:
с ним в браузере сбрасывается значение порта.
server {
listen 8888 ssl;
server_name hostname.domain.ru:8888;
ssl_sertificate *\server.crt;
ssl_sertificate_key *\server.key;
location / {
proxy_pass http://127.0.0.1:8500;
proxy_set_header Host $host
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
}
error_log error.log
acces_log acces.log
}

нашел в инете еще такой вариант, завтра попробую:
server {
listen 8888 ssl;
server_name hostname.domain.ru:8888;
ssl_sertificate *\server.crt;
ssl_sertificate_key *\server.key;
location / {
proxy_pass http://127.0.0.1:8500;
proxy_set_header Host $host
add_header Front-End-Https on
add_header Referer-Policy no-referer
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Scheme $scheme;
proxy_set_header X-Forwarded-Port $server_port;
}
error_log error.log
acces_log acces.log
}
 
Последнее редактирование:

azm9s

New member
Сообщения
277
#5
не работает ни тот, ни тот вариант конфига...
помогите)))
 

oko

New member
Сообщения
1 257
#6
to azm9s
Далеко не специалист по web и nginx в частности, но есть подозрение, что корень зла - заголовки, предписывающие браузеру соединяться по HTTPS, что дефолтно обрабатывается как подключение на https://site:443. В вашем случае, если принимать во внимание самый первый конфиг, проксирование работает (подключение к https://site:8445/url вручную отрабатывает и где-то на заднем плане дергает ваш http://127.0.0.1:8983). А не работает автоматическое присвоение нестандартного порта (8445) при использовании HTTPS. В таком случае, попробуйте добавить опцию "error_page 497 https://$host:$server_port$request_uri;" в секцию "server" и проверить. В принципе, вместо $host:$server_port можно явно указать site.domain:8445...

server {
server_name site.domain;
listen 8545 ssl;
ssl_certificate "/etc/apache2/ssl/server.crt";
ssl_certificate_key "/etc/apache2/ssl/server.key";
access_log /var/log/nginx/site-access.log;
error_log /var/log/nginx/site.error.log;
error_page 497 https://$host:$server_port$request_uri;
location / {
proxy_pass http://127.0.0.1:8983;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

Ежели заработает, средствами iptables закройте доступ в цепочке INPUT для всех кроме localhost на порт 8983 (http)...
Кстати, в логах ничего интересного не присутствует?
 

azm9s

New member
Сообщения
277
#7
проблема оказалась в строке хидера:
proxy_set_header Host $host
надо вот так:
proxy_set_header Host $http_host
 

azm9s

New member
Сообщения
277
#8
средствами iptables закройте доступ в цепочке INPUT для всех кроме localhost на порт 8983 (http)...
это изначально было включено.
нефиг подключаться к тому, что для этого не предназначено.
да и слушается только localhost.