Назад | Перейти на главную страницу

Прокси с использованием nginx

Я нахожусь в процессе значительного переписывания / обновления группы сервисов, и мне трудно заставить Apache / Nginx / Django хорошо взаимодействовать друг с другом.

Здесь происходит внутреннее приложение и конечные точки API, написанные с использованием Django и подключенные к Apache через mod_wsgi. Все это работает на порту 8080. Следуя передовым методам Django, я использую nginx в качестве прокси для обслуживания статических ресурсов, позволяя корневому содержимому передаваться в приложение Django. Итак, nginx прослушивает порт 80 и маршрутизирует любой трафик, который не начинается с /static/ в порт 8080.

У нас есть сайт WordPress с настраиваемым плагином, который использует конечные точки в приложении Django. Я бы хотел, чтобы wordpress работал на порту 8091, но имел любые URL-адреса, например localhost/wp/ попал на сайт WP.

К сожалению, сейчас я получаю сообщение 404 каждый раз, когда пытаюсь получить доступ к отдельным сайтам через порт 80. Нажатие localhost:8080 и localhost:8091 показать ожидаемые приложения, но не через прямую localhost.

nginx.conf:

upstream backend {
        server localhost:8080;
}

server {
        listen 80;
        server_name www.staging.com staging.com staging-local;

        access_log /home/mainuser/projects/update/logs/nginx_access.log;
        error_log  /home/mainuser/projects/update/logs/nginx_error.log info;

        location /wp/ {
                proxy_pass http://localhost:8901;
                include /etc/nginx/proxy_params;
        }

        location /static/ {
                root /home/mainuser/projects/update/server/data/static;
        }

         location / {
                proxy_pass http://localhost:8080;
                include /etc/nginx/proxy_params;
        }
}

proxy_params:

proxy_redirect  off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size        10m;
client_body_buffer_size     128k;
proxy_connect_timeout       90;
proxy_send_timeout          90;
proxy_read_timeout          90;
proxy_buffer_size           4k;
proxy_buffers               4 32k;
proxy_busy_buffers_size     64k;
proxy_temp_file_write_size  64k;

У вас есть неиспользованный upstream названный backend куда вы указываете ничего в данный момент. Прямо из Nginx upstream документы:

upstream backend {
    server backend1.example.com      weight=5;
    server backend2.example.com:8080 fail_timeout=5s slow_start=30s;
    server backend3.example.com      resolve;

    server backup1.example.com:8080  backup;
    server backup2.example.com:8080  backup;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

В port устанавливается в upstream, не proxy_pass директива.