Я установил SSL-сертификат в nginx, но запись URL в браузере говорит мне: ERR_CONNECTION_REFUSED - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть приложение Node js, которое прослушивает порт 3000. Я установил nginx и настроил его так, чтобы он перенаправлял данные с порта 80 на 3000, используя следующую строку:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

У меня также естьприсвоенное доменное имя: okium.fun.Наконец я купил сертификат SSL и настроил файл /etc/nginx/sites-aviable/default, чтобы попытаться заставить его работать.Мой файл по умолчанию выглядит следующим образом:

server {
  listen 80 default_server;
  listen [::]:80 default_server;
  listen 443 ssl;

  root /var/www/html;
  index index.html index.htm index.nginx-debian.html;

  server_name  okium.fun;

  ssl_certificate /root/okium.fun.chained.crt;
  ssl_certificate_key /root/okium.fun.key;

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

  location / {
    try_files $uri $uri/ =404;
  }
}

При записи http://okium.fun или http://www.okium.fun в браузере приложение отображается правильно, но при наборе https://okium.fun или https://www.okium.fun Я получаю следующее сообщение "Страница okium.fun отклонила соединение. ERR_CONNECTION_REFUSED".

Есть идеи о том, что может происходить?

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Существует опечатка, записывающая номер порта в файле по умолчанию.

Я думаю, что порт должен быть указан как 443 вместо 433 в конфигурации ssl cert

0 голосов
/ 21 февраля 2019

Несколько предложений:

1) Удалите перенаправление iptables, возможно, вы захотите, чтобы nginx работал с перенаправлениями, а не с iptables.

-D флаг отменяет правило iptables:

sudo iptables -t nat -D PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

2) Проверьте конфигурацию iptables, особенно секцию Chain INPUT, она должна разрешать входящие соединения на порт 443.

Вот как вы можете включить его: iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

3) Убедитесь, что nginx запущен и работает systemctl status nginx.Похоже, что ваши подключения к порту 80 были ранее перенаправлены iptables непосредственно в ваше приложение node.js.

4) Убедитесь, что nginx считывает вашу конфигурацию.Проверьте файл конфигурации nginx (less /etc/nginx/nginx.conf), скорее всего, он будет иметь такие строки:

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

Если это так, папка sites-aviable не читается по умолчанию, и вам нужно будет создатьсимволическая ссылка на ваш пользовательский файл конфигурации:

sudo ln -s /etc/nginx/sites-aviable/default /etc/nginx/sites-enabled/default

5) Обновите вашу конфигурацию /etc/nginx/sites-aviable/default, включив в нее правило proxy_pass:

server {
    server_name okium.fun;

    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;

    # your ssl configuration here
    # ...

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

6) Проверьте конфигурацию nginx: sudo nginx -t.Если все в порядке, вы увидите следующее сообщение:

the configuration file /etc/nginx/nginx.conf syntax is ok

7) Перезагрузите nginx sudo nginx -s reload и проверьте, можете ли вы подключиться через https.

8) Если вы все еще получаете ERR_CONNECTION_REFUSED, вернитесь к вашей конфигурации iptables sudo iptables -nL и убедитесь, что nginx прослушивает 443 порт sudo lsof -i.

0 голосов
/ 21 февраля 2019

Как вы знаете, https - это порт 443, но вы настроили прослушивание 433 ssl; ..

433 - это не 443 ... просто опечатка

...