运行 Nginx 作为 gunicorn 和 apache2 的反向代理

运行 Nginx 作为 gunicorn 和 apache2 的反向代理

我想使用 nginx 作为 apache 和 gunicorn 的反向

location /应该由 apache 处理

location /webapps/应该由 gunicorn 处理

upstream gfbu_app_server {
        server unix:/webapps/gfbu/run/gunicorn.sock fail_timeout=0;
        }

server {
        listen  80;
        server_name eu-con.gfbu;

        client_max_body_size 4G;

        access_log /webapps/gfbu/logs/nginx-access.log;
        error_log /webapps/gfbu/logs/nginx-error.log;

        location /static/ {
                alias /webapps/gfbu/gfbu/static/;
        }
        location /media/ {
                alias /webapps/gfbu/gfbu/media/;
        }

        location /webapps/ {
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_redirect off;
        if (!-f $request_filename) {
                proxy_pass http://gfbu_app_server;
                break;
                }
        }

        error_page 500 502 503 504 /500.html;
        location = 500.html {
                root /webapps/gfbu/static/;
                }

        # everything to apache
        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header Host $host;
                proxy_pass http://127.0.0.1:8090;
                }

这有点用处,但是 gunicorn 的请求 URL 必须是http://<ipaddress>/webapps/这样的才能/起作用。

Gunicorn 为 Django Webapp 提供服务,但它无法匹配http://<ipaddress>/webapps/任何 URL 模式。显然我在这里做错了什么 - 来自 Apache 和 mod_wsgi 的请求可以重定向到指定的 wsgi_script,而无需 subdir 部分。

我不确定 nginx -> gunicorn -> django 堆栈的哪个部分配置错误 - 你能帮我吗?

答案1

代替

proxy_pass http://gfbu_app_server;

和:

proxy_pass http://gfbu_app_server/;

这不适用于 if 块。为了不破坏 Django 自动生成的 URL(记住:Django 认为它在文档根目录下运行),您必须将变量添加FORCE_SCRIPT_NAMEsettings.py例如:

FORCE_SCRIPT_NAME = "/webapps"

还请检查是否需要更改 LOGIN_URL 和 LOGOUT_URL 的重定向

相关内容