![运行 Nginx 作为 gunicorn 和 apache2 的反向代理](https://linux22.com/image/662340/%E8%BF%90%E8%A1%8C%20Nginx%20%E4%BD%9C%E4%B8%BA%20gunicorn%20%E5%92%8C%20apache2%20%E7%9A%84%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86.png)
我想使用 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_NAME
到settings.py
例如:
FORCE_SCRIPT_NAME = "/webapps"
还请检查是否需要更改 LOGIN_URL 和 LOGOUT_URL 的重定向