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

我使用djangonginx和apache。 当我通过一个URL(例如http://www.foo.com/ )访问我的网站时,我的浏览器地址中显示的是pipe理员追加的IP地址(例如http://123.45.67.890/admin/ )。 当我通过IP访问网站时,django的urls.py会按照预期redirect(例如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; 

它可能是你的mod_rpafconfiguration,我特别猜测“RPAFsethostname On”行。

我不完全有信心,因为经过10分钟的search之后,清楚地知道mod_rpaf上的任何地方都没有任何文档。 这似乎是你只能在less数“我和我的花哨”的博客文章中听到的那种东西。 它解决了一个问题,你可以很容易地在你的django层解决,而不是运行一些神秘的apache模块。

它实际上覆盖了本书的中间件一章: http : //www.djangobook.com/zh/2.0/chapter17/

为什么甚至使用nginx + apache + mod_python? 你的堆栈是疯狂的,mod_python是非常缓慢的。 看看去除apache和运行一个wsgi服务器:我推荐uwsgi。 我用它与Nginx和Django,这是美好的!

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

我认为你只是在复杂的事情。