У меня есть веб-приложение React, которое я пытаюсь развернуть на экземпляре AWS EC2, и я использую NGINX. Я пытаюсь настроить его так, чтобы все http-запросы перенаправлялись на https. В данный момент он, похоже, перенаправляет все http-запросы на https, но NGINX перенаправляет запрос по умолчанию / usr / share / nginx / html / вместо веб-приложения, которое я запускаю на localhost. Я прочитал десятки статей и пытался понять это в течение нескольких дней. Указатели будут высоко оценены. Заранее спасибо.
Вот моя NGINX конфигурация сервера в / etc / nginx / sites-available / default:
server {
listen 80;
if ($http_x_forwarded_proto = "http") {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2 default_server;
listen 443 ssl http2 default_server;
ssl on;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1h;
location / {
proxy_pass http://127.0.0.1:3839;
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-Forwarded-Proto https;
}
}
Кроме того, приложение работает и доступно в порту указано в моем блоке местоположения. Я могу добраться до него на машине с curl 127.0.0.1:3839 без проблем. В /var/log/nginx/error.log я вижу, что nginx пытается обслуживать запросы из каталога / usr / share / nginx / html /, как я и выяснил, в этом проблема. Я просто понятия не имею, почему он отправляет запросы туда, а не на порт на localhost, который я указал в своем блоке местоположения. Если я go на root URL для моего приложения, я получаю страницу "Добро пожаловать в NGINX". Если я go на любой подпуть под моим root URL-адресом, например example.com/login, то я получаю 404, и error.log показывает, что он не может найти ресурс / usr / share / nginx / html / login, например , Спасибо:)
Обновление:
Внутри серверного блока listen 80 я добавил
location / {
proxy_pass http://127.0.0.1:3839;
}
, и теперь кажется, что он работает правильно, но я понятия не имею, почему Мне нужно было бы определить блок местоположения в определении сервера listen 80, если запросы в этом блоке просто перенаправляются, чтобы быть перехваченными другим определением сервера, прослушивающим 443. Любая идея, почему это работает сейчас?