Django nginx 和追加斜杠问题

Posted

技术标签:

【中文标题】Django nginx 和追加斜杠问题【英文标题】:Django nginx and append slashes problem 【发布时间】:2011-04-28 18:15:25 【问题描述】:

我正在尝试使用 nginx 作为 django 的简单负载均衡器,按照 Jacob Kaplan-Moss 的示例: http://github.com/jacobian/django-deployment-workshop http://python.mirocommunity.org/video/1689/pycon-2010-django-deployment-w

如果我停止 nginx 并让 apache 在端口 80 上侦听一切正常。如果我让 apache 监听 nginx,我的网址就会中断。

当 nginx 运行时,http://184.106../admin/ 有效,但 http://184.106../admin(缺少结尾斜杠)中断。它重定向到Web服务器的名称http://web1/admin/

我知道是 nginx 导致了这个问题,因为重定向在 apache 和 django 开发服务器中工作正常。

这是正在运行的 nginx.conf:

# Nginx conf (/etc/nginx/nginx.conf).

#
# Basic setup
#

user www-data;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

#
# Event/worker setup.
#

worker_processes 4;
events 
    worker_connections 100;


#
# HTTP configuration
#

http 
    include /etc/nginx/mime.types;

    # HTTP upstream for load balancers.
    # Replace the IPs below with IPs (or names) of your upstream Apaches
    upstream sitename 
        server 10.X.X.X:8000;
        server 10.X.X.X:8000;
    

    # The actual HTTP sever.
    server 
        listen 80;

        # Don't proxy static files like robots.txt and favicon.ico.
        location ~ ^/(favicon.ico|robots.txt|sitemap.xml)$ 
            alias /home/web/static/$1;
        

        # Serve media directly out of Nginx for performance
        location /media 
            alias /home/media;
        

        # Proxy everything else to the backend
        location / 
            proxy_pass http://sitename;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;      
            add_header X-Handled-By $upstream_addr;      
        
    

【问题讨论】:

可以安全地假设您在某个 server 块上有一个 server_name 吗?这是我看到的第一个奇怪的东西,虽然我不明白它会如何导致你描述的问题。 【参考方案1】:

按照 Jacob 的 nginx 示例,我遇到了与您完全相同的问题,并且没有斜杠会导致不正确的重定向。 pjmorse 的响应帮助了我,我在服务器块( server server_name: vasir.net; .... )中设置了 server_name 并解决了问题。但是,我必须先重新启动服务器,然后

【讨论】:

抱歉,刚刚回到这个话题。你在哪里设置服务器名称?我在 nginx 配置中尝试了“server”指令,但它会导致错误。 感谢您的帮助。有几个问题,所以在这里发帖。在“listen 80;”之后将服务器名称放在 nginx.conf 中的“server ”指令中它看起来像“server_name yourdomain.com alias www.yourdomain.com;”

以上是关于Django nginx 和追加斜杠问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 URL 的末尾需要一个斜杠?

nginx的域名访问和路径结尾斜杠问题

关于tomcat会在url末尾自动追加斜杠(/)

让 apache 和 django 添加一个斜杠

django网页问题 url自动添加了斜杠

包含正斜杠的 Django URL 正则表达式