Для nginx слушаю ли я порт 443 или порт 3000 для этого URL https://localhost: 3000? - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь перемещаться по сорнякам nginx и обратному прокси-серверу, и одна область, в которой я путаюсь, - это сопоставления портов. Вот пример nginx файла конфигурации:

server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    server_name www.domain.com;
    passenger_enabled on;
    root /home/ubuntu/app/public;
    include snippets/self-signed.conf;
    include snippets/ssl-params.conf;
}

Здесь я указываю, что мое приложение должно прослушивать порт 443, поскольку на нем есть самозаверяющий сертификат. Он не принимает порт 80 http, но только 443. Вот пример, который я нашел о proxy_passing для localhost. Что я и хочу сделать. Вот пример:

server {
    listen       443;
    server_name  localhost;

    ssl                  on;
    ssl_certificate      server.crt;
    ssl_certificate_key  server.key;
    ssl_session_timeout  5m;

    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;

    location / {
      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_set_header    X-Client-Verify  SUCCESS;
      proxy_set_header    X-Client-DN      $ssl_client_s_dn;
      proxy_set_header    X-SSL-Subject    $ssl_client_s_dn;
      proxy_set_header    X-SSL-Issuer     $ssl_client_i_dn;
      proxy_read_timeout 1800;
      proxy_connect_timeout 1800;
    }
}

Вот то, чего я не понимаю и могу использовать некоторые пояснения. Какой порт / URL я слушаю во втором примере? В блоке сервера я вижу это:

    listen       443;
    server_name  localhost;

Это означает, что мы слушаем localhost на 443 через https. Это достаточно просто, чтобы понять до сих пор. Теперь мы попадаем в блок location.

   location / {
      proxy_pass  http://localhost:3000;

Что здесь происходит? Если я начну nginx и наберу в адресной строке http:localhost:3000, что произойдет? Сбой, потому что я набрал http? Разве это не должно было быть https:localhost:3000? Слушаю ли я порт 80, 443 или 3000?

Кроме того, небольшой вопрос. Что произойдет, если я открою свое приложение Postman и наберу запрос get на http://localhost:3000 или https://localhost со второй конфигурацией? Будет ли он попадать на сервер nginx или попытаться связаться с локальным хостом моего ноутбука?

1 Ответ

0 голосов
/ 07 апреля 2020

В вашей требуемой ссылке используется директива ssl on, которая устарела

Взгляните на http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl

Когда вы указываете, какие порты прослушивать вам нужно сгруппировать их по схеме (HTTP | HTTPS)

Пример блока сервера будет выглядеть как

server {
    listen 80 http2 default_server;
    listen [::]:80 http2 default_server;

    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;

    server_name www.domain.com;
    passenger_enabled on;
    root /home/ubuntu/app/public;
    include snippets/self-signed.conf;
    include snippets/ssl-params.conf;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...