Статический ресурс обратного прокси-сервера nginx 404 не найден - PullRequest
0 голосов
/ 05 мая 2019

Я использую nginx и обратный прокси, а также Docker контейнеры.

У меня есть два контейнера для докеров.

319f103c82e5        web_client_web_client   "nginx -g 'daemon of…"   6 minutes ago       Up 5 minutes        0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp      web_client
7636ddaeae99        admin_web_admin         "nginx -g 'daemon of…"   2 hours ago         Up 2 hours          0.0.0.0:6500->80/tcp, 0.0.0.0:7000->443/tcp   web_admin

Это мои два контейнера. когда я ввожу http://website.com,, он переходит в контейнер web_client_web_client. Когда я ввожу http://website.com:6500,, он переходит в контейнер admin_web_admin. Это поток прямо сейчас.

Я хочу, чтобы мои администраторы не набирали http://website.com:6500, чтобы попасть на страницу администратора. Я предпочитаю, чтобы они набрали http://website.com/admin. Поэтому я решил использовать proxy_pass, что означает, что при доступе к http://website.com/admin, он должен proxy_pass к https://website.com:7000

Итак, сейчас я публикую конфигурацию nginx для web_client_web_client, поскольку она обрабатывает запросы на порты 80 и 433.

Вот оно:

server {
    listen 80 default_server;
    server_name website.com;
    location / {
        rewrite ^ https://$host$request_uri? permanent;
    }
    location /admin {
        proxy_pass https://website.com:7000/;
    }

    # I also tried
    #location /admin/ {
    #   proxy_pass https://website.com:7000/;
    #}

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }
}
server {
    listen 443 ssl;
    server_name website.com;

    gzip on;
    gzip_min_length 1000;
    gzip_types text/plain text/xml application/javascript text/css;

    ssl_certificate /etc/letsencrypt/live/website.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/website.com/privkey.pem;

    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    root /usr/share/nginx/html;

    location / {
        add_header Cache-Control "no-store";
        try_files $uri $uri/index.html /index.html;
    }

    location ~ \.(?!html) {
        add_header Cache-Control "public, max-age=2678400";
        try_files $uri =404;
    }
}

Теперь, что происходит, это статические файлы (файлы css и js не загружаются) и при проверке из chrome запрос делается как https://website.com/static/css/app.597efb9d44f82f809fff1f026af2b728.css вместо https://website.com:7000/static/css/app.597efb9d44f82f809fff1f026af2b728.css. Так говорит 404 не найден. Я очень долго оборачиваюсь вокруг этого, и мне кажется глупым не понимать такую ​​простую вещь.

Я ценю вашу помощь.

1 Ответ

1 голос
/ 05 мая 2019

Ваша главная проблема не в nginx, а в том, как настроены 2 приложения. У меня нет вашего кода, но вот что я могу вывести из вашего поста:

На ваших страницах вы загружаете статический контент, используя абсолютные пути: / static / css / ... Так что даже когда вы вызываете ваши страницы с / admin впереди, они все равно будут пытаться загрузить статический контент из / static /

Одним из решений является использование относительных путей для вашего статического контента. В зависимости от сложности вашего приложения, это может потребовать некоторой работы ... Вам нужно изменить путь к статическим файлам на что-то вроде "./static/css / ..." и убедиться, что ваши файлы все еще работают. Тогда ваша настройка в nginx будет работать, потому что страницы администратора будут пытаться загрузить '/ admin / static / ...'

Другое решение состоит в том, чтобы переименовать «статическую» папку в приложении администратора во что-то другое, а затем проксипропустить этот новый путь в вашей конфигурации nginx.

И последнее: в вашем посте упоминаются 2 порта: 6500 и 7000. Я предполагаю, что это ошибка, поэтому вы можете ее исправить? Или я не так понял?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...