LINUX.ORG.RU
решено ФорумAdmin

Не получается полностью исключить некоторые параметры из урл

 ,


0

1

Всем привет. Помогите пожалуйста подправить мой конфиг ngix:

server {
    listen 443 ssl;
    server_name spexfy.xyz;
  
    location / {
        proxy_pass http://127.0.0.1:9001/;
    }

    ssl_certificate /home/spexfy/ssl.combined;
    ssl_certificate_key /home/spexfy/ssl.key;
}

Результат

А должен быть доступ только по https://spexfy.xyz/. Проброс обязателен, так как хочу избавиться от порта в урл по которому работает сервис.

Спасибо!

Если у вас ngix слушает только 443 порт, то каким образом срабатывает http://spexfy.xyz:9001/? Или у вас порт 9001 слушается на всех интерфейсах, и вы это хотите закрыть с помощью ngix, а не настроек http-сервера или фаервола?

mky ★★★★★ ()
Ответ на: комментарий от mky

Порт прописан в сервисе который я подключаю. По умолчанию у него порт 9001. Доступен сервис через 127.0.0.1:9001 и 49.12.65.157:9001 по протоколу http. Мне нужно сделать его же доступным по протоколу https + доомен + избавиться от порта, все остальное запретить.

lex-romanow ()
Ответ на: комментарий от lex-romanow

Ну в таком случае вам нужно вешать внутренний сервис не на 49.12.65.157:9001 и не на *:9001 А конкретно на 127.0.0.1

Тогда nginx будет адекватно проксировать. Можете еще через iptables порт закрыть на всякий случай для всех кроме локалхоста.

Дл того, чтобы работать только по домену (без IP) можно создать заглушку. Вот здесь это прекрасно демонстрировали.

balzi ()
Ответ на: комментарий от balzi

полностью убирать http - не лучшая идея, как по мне

почему? для веб сайта да, там лучше делать редирект хттп -> хттпс, но в данном случае будет жесткий переход на сервис по нужному урл, все остальное должно отметаться

lex-romanow ()
Ответ на: комментарий от balzi

Ну в таком случае вам нужно вешать внутренний сервис не на 49.12.65.157:9001 и не на *:9001 А конкретно на 127.0.0.1

в настройках сервиса вообще указано так :)

{
    "ip": "0.0.0.0",
    "port": 9001,
}
При запуске сервиса в его логах вижу http://0.0.0.0:9001/, хотя доступен по выше перечисленным адресам из скрина.

Тогда nginx будет адекватно проксировать. Можете еще через iptables порт закрыть на всякий случай для всех кроме локалхоста.

хорошая идея, возьму на заметку

Для того, чтобы работать только по домену (без IP) можно создать заглушку. Вот здесь это прекрасно демонстрировали.

попробую сейчас

lex-romanow ()
Ответ на: комментарий от balzi
[2020-04-13 15:57:26.523] [INFO] console - You can access your Etherpad instance at http://127.0.0.1:9001/

Поменял ИП в наастрройках сервиса, имеем следующий результат Конфиг:

server {
    listen 80 default_server;
    listen 443 ssl default_server;

    return 403;
}
server {
    listen 443 ssl;
    server_name spexfy.xyz;

    location / {
        proxy_pass http://127.0.0.1:9001/;
    }

    ssl_certificate /home/spexfy/ssl.combined;
    ssl_certificate_key /home/spexfy/ssl.key;
}

lex-romanow ()

Бжчки. Здесь оставь как есть. Выше добавь ещё одну секцию server с listen 80 и с редиректом на https. Усё.

upd: а, ну и 9001 порт прикрой как-нибудь. файерволлом там например.

Dispetcher14 ★★★★ ()
Последнее исправление: Dispetcher14 (всего исправлений: 1)
Ответ на: комментарий от lex-romanow

listen 80 default_server;

можете, в принципе, убирать, вам http все равно не нужен.

listen 443 ssl; server_name spexfy.xyz;

попробуйте заменить на

listen 49.12.65.157:443 ssl; server_name spexfy.xyz;

Хотя, это, вроде как, не должно ничего решить, 443 у вас слушается и открыт. Но на всякий случай.

balzi ()
Ответ на: комментарий от balzi
server {
    #listen 80 default_server;
    listen 443 ssl default_server;

    return 403;
}
server {
    #listen 443 ssl;
    listen 49.12.65.157:443 ssl;
    server_name spexfy.xyz;

    location / {
        proxy_pass http://127.0.0.1:9001/;
    }

    ssl_certificate /home/spexfy/ssl.combined;
    ssl_certificate_key /home/spexfy/ssl.key;
}

Результат

lex-romanow ()
Ответ на: комментарий от lex-romanow

Дальше либо сами (гугл + эксперименты), либо в job за денежку. Что вспомнил - подсказал. Далее все зависит от вашей полной конфигурации (вдруг еще есть конфиги) или же вы что-то не так делает (бывает). А тут все превращается в угадывание.

Ну либо кто-то еще что подскажет.

balzi ()
Ответ на: комментарий от balzi

Спасибо вам на этом. Вы верно подсказали, что нужно правильный ИП прописать в настройках сервиса.

Немного поковырял, то все вышло :) Через условия, вот только насколько это допустимо, пока не знаю.

server {
    listen 443 ssl;
    server_name spexfy.xyz;
    
    if ($http_host ~* "^www\.(.+)$") {
    	return 444;
    }
    
    if ($host !~* "^spexfy\.xyz$") {
    	return 444;
    }
    
    location / {
    	proxy_pass http://127.0.0.1:9001/;
    }
    
    ssl_certificate /home/spexfy/ssl.combined;
    ssl_certificate_key /home/spexfy/ssl.key;
}

Результат

Спасибо еще раз!

П.С. Нужно ли закрывать 9001 порт в ИП таблицах или фаерволе?

lex-romanow ()
Ответ на: комментарий от lex-romanow

Не за что)

П.С. Нужно ли закрывать 9001 порт в ИП таблицах или фаерволе?

Так как он висит на локалхосте, то особой надобности в этом я не вижу. Тем более, что он недоступен:

PORT      STATE SERVICE
25/tcp    open  smtp
53/tcp    open  domain
110/tcp   open  pop3
143/tcp   open  imap
443/tcp   open  https
465/tcp   open  smtps
587/tcp   open  submission
993/tcp   open  imaps
995/tcp   open  pop3s
10000/tcp open  snet-sensor-mgmt

Мне кажется, если есть правило

    if ($host !~* "^spexfy\.xyz$") {
    	return 444;
    }
То
    if ($http_host ~* "^www\.(.+)$") {
    	return 444;
    }

уже не нужно. Но могу ошибаться.

balzi ()