Django 在浏览器中将 URL 重写为 IP 地址-为什么?

Django 在浏览器中将 URL 重写为 IP 地址-为什么?

我使用的是 django、nginx 和 apache。当我使用 URL 访问我的网站时(例如,http://www.foo.com/)我的浏览器地址显示的是 IP 地址加上 admin(例如,http://123.45.67.890/admin/当我通过 IP 访问该网站时,它会按照 django 的 urls.py 的预期进行重定向(例如,http://123.45.67.890/->http://123.45.67.890/accounts/login/?next=/

我希望名称 URL 的行为方式与 IP 相同。也就是说,如果 URL 转到新视图,浏览器地址中的主机应保持不变,而不会更改为 IP 地址。我应该在哪里寻找解决方案?

我的文件:

; cpa.com (apache)
NameVirtualHost *:8080

<VirtualHost *:8080>

AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/htm

DocumentRoot /path/to/root
ServerName www.foo.com

<IfModule mod_rpaf.c>
    RPAFenable On
    RPAFsethostname On
    RPAFproxy_ips 127.0.0.1
</IfModule>

<Directory /public/static>
    AllowOverride None
    AddHandler mod_python .py
    PythonHandler mod_python.publisher
</Directory>

Alias / /dj
<Location />
    SetHandler python-program
      PythonPath "['/usr/lib/python2.5/site-packages/django', '/usr/lib/python2.5/site-packages/django/forms'] + sys.path"
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE dj.settings
    PythonDebug On
</Location>

</VirtualHost>

; ports.conf (apache)
Listen 127.0.0.1:8080

; cpa.conf (nginx)
server { 

listen       80;
server_name  www.foo.com;

location /static {
    root   /var/public;
    index  index.html;
}

location /cpa/js {
    root   /var/public/js;
}

location /cpa/css {
    root   /var/public/css;
}

location /djmedia {
    alias "/usr/lib/python2.5/site-packages/django/contrib/admin/media/";
}

location / {
include /etc/nginx/proxy.conf;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass   http://127.0.0.1:8080;
}
}

; proxy.conf (nginx)

proxy_redirect          off;
proxy_set_header        Host            $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      500;
proxy_buffers           32 4k;

答案1

它可能是您的 mod_rpaf 配置,我猜测特别是“RPAFsethostname On”行。

我并不完全有信心,因为在谷歌上搜索了 10 分钟后,很明显 mod_rpaf 的文档很少甚至根本没有。这似乎是那种你只会在少数“我和我的花哨堆栈”博客文章中听到的东西。它解决了一个问题,你可以在你的 django 层中轻松解决,而不必运行你在某些博客文章中读到的某个人编写的神秘 apache 模块。

它实际上在本书的中间件章节中有所涉及:http://www.djangobook.com/en/2.0/chapter17/

答案2

为什么还要使用 nginx+apache+mod_python?您的堆栈很疯狂,mod_python 非常慢。考虑删除 apache 并运行 wsgi 服务器:我推荐 uwsgi。我将其与 nginx 和 django 一起使用,效果非常好!

http://projects.unbit.it/uwsgi/

我认为你只是把事情弄得太复杂了。

相关内容