После http -> https nginx не находит статический контент - PullRequest
0 голосов
/ 26 августа 2018

У меня была рабочая установка для обслуживания статических файлов с помощью nginx, используя http.

Позже, когда я переключился на https, изменив порт с 80 на 443, а также добавив ssl-сертификат и ключ, веб-сервер больше не может найти статические файлы. Я получаю 404 ответа для всех статических файлов. Это мой конфигурационный файл nginx:

http {

    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;


    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    ssl_prefer_server_ciphers on;


    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    upstream http_backend {
            server 127.0.0.1:3001;
            keepalive 32;
    }

    server {
            listen       80;
            server_name  test.com;

            # Redirect to https
            location / {
                    rewrite ^ https://$host$request_uri permanent;
            }
    }

    server {
            listen 443 default_server ssl;
            server_name localhost;
            root /var/www/myblog/app/resources/public;

            ssl on;
            ssl_certificate /etc/nginx/certificate.crt;
            ssl_certificate_key /etc/nginx/key.pem;

            location / {
                    proxy_redirect off;

                    proxy_pass              http://http_backend;
                    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-Host $server_name;
                    proxy_set_header        X-Forwarded-Proto https;

                    access_log /var/www/logs/myblog.access.log;
                    error_log /var/www/logs/myblog.error.log;
            }

            location ^~ /(css|js) {
                    root /var/www/myblog/app/resources/public;
            }
    }
}

Мой журнал доступа:

37.201.226.254 - - [26/Aug/2018:06:41:25 +0000] "GET /js/compiled/foo.js HTTP/1.1" 404 38 "https://www.test.com/" "Mozilla/5.0 (X11; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"    
37.201.226.254 - - [26/Aug/2018:06:41:25 +0000] "GET /css/mui.css HTTP/1.1" 404 38 "https://www.test.com/" "Mozilla/5.0 (X11; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"           
37.201.226.254 - - [26/Aug/2018:06:41:25 +0000] "GET /css/style.css HTTP/1.1" 304 0 "https://www.test.com/" "Mozilla/5.0 (X11; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"

Файлы в /var/www/myblog/app/resources/public: это настроено как root. Я запускаю веб-сервер с /var/www/myblog/app.

Помните, что это мое первое развертывание с использованием NGINX. У кого-нибудь есть идея, что я забыл настроить для обслуживания статических файлов с https? Моя ОС Linux.

1 Ответ

0 голосов
/ 26 августа 2018

Я обнаружил проблему методом случайных проб и ошибок.По какой-то причине изменение

        location ^~ /(css|js) {
                root /var/www/myblog/app/resources/public;
        }

на

        location ~ ^/(css/|js/) {
                root /var/www/myblog/app/resources/public/;
        }

, похоже, работает.

...