Я установил новый сертификат SSL и настроил Nginx для его использования. Но время ожидания запросов при попытке перейти на HTTPS на сайте. Когда я подключаюсь через telnet к своему домену через порт 80, он подключается, но время ожидания истекает через порт 443. Я не уверен, есть ли какие-то настройки по умолчанию в Ubuntu, препятствующие подключению. cURL также отключается по адресу HTTPS, но отвечает на обычный HTTP.
Статус UFW показывает:
443 ALLOW Anywhere
netstat -a показывает:
tcp 0 0 *:https *:* LISTEN
nmap localhost показывает:
443/tcp open https
Соответствующий блок в конфигурации Nginx:
server {
listen 443;
listen [::]:80 ipv6only=on;
listen 80;
root /path/to/app;
server_name mydomain.com
ssl on;
ssl_certificate /etc/nginx/ssl/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass http://mydomain.com;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Изменить: попробовав целый ряд параметров конфигурации nginx, я действительно сомневаюсь, что это настройка. Если ssl-bundle.crt испорчен, произойдет ли тайм-аут? Если это так, я могу вернуться к PositiveSSL для поддержки.
Попробуй это:
server {
listen 443 ssl;
listen [::]:80 ipv6only=on;
listen 80;
root /path/to/app;
server_name mydomain.com
ssl_certificate /etc/nginx/ssl/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass http://mydomain.com;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
(удалять ssl on;
, Добавить ssl
к listen 443;
)
Проблема была не в Nginx и не в том, с чем кто-то мог бы помочь, поэтому я оставлю это здесь на случай, если у кого-то возникнет эта проблема в будущем.
Проблема заключалась в том, что порт 443 был закрыт на Cloudflare, так как у меня был бесплатный тариф. Они не поддерживают SSL в бесплатном плане.
Я хотел бы согласиться с комментарием Штеффена (слушайте 443 и слушайте 80 в том же серверном блоке).
Пожалуйста, обрабатывайте HTTP и HTTPS в разных серверных блоках. Я предполагаю, что вторая директива прослушивания перезаписала вашу первую директиву прослушивания. Кроме того, я пропустил ключевое слово «ssl» в ваших директивах прослушивания для порта 443.
server {
listen 80;
listen [::]:80 ipv6only=on;
root /path/to/app;
server_name mydomain.com
location / {
proxy_pass http://mydomain.com;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl ipv6only=on;
root /path/to/app;
server_name mydomain.com
ssl on;
ssl_certificate /etc/nginx/ssl/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass http://mydomain.com;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Как сообщил пользователь xofer, в одном серверном блоке могут быть HTTP и HTTPS. Итак, пример для этого универсального решения:
server {
listen 80;
listen [::]:80 ipv6only=on;
listen 443 ssl;
listen [::]:443 ssl ipv6only=on;
root /path/to/app;
server_name mydomain.com
ssl on;
ssl_certificate /etc/nginx/ssl/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass http://mydomain.com;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}