На этот вопрос уже есть ответ здесь:
Когда я получаю доступ по протоколу https, он работает. Но я обращаюсь по протоколу http, он вообще не работает.
Моя версия Nginx - 1.12.1. Вот конфигурация: / etc / nginx / sites-available / ***:
server {
listen 80;
server_name ***;
client_max_body_size 10240M;
location / {
proxy_pass http://localhost:8080/guacamole/;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_cookie_path /guacamole/ /;
access_log off;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/***/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/***/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
if ($scheme != "https") {
return 301 https://$host$request_uri;
} # managed by Certbot
}
Я бы включил журналы отладки на nginx и отслеживал, что на самом деле происходит, когда вы пытаетесь получить доступ к своей странице с помощью http.
Я бы также не рекомендовал использовать IF-оператор внутри nginx для того, чего вы пытаетесь достичь. Попробуйте разбить виртуальный хост на два серверных раздела:
server {
listen 80;
server_name ***;
rewrite ^ https://***$uri permanent;
}
server {
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/***/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/***/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
server_name ***;
client_max_body_size 10240M;
location / {
proxy_pass http://localhost:8080/guacamole/;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_cookie_path /guacamole/ /;
access_log off;
}
}