Mit*_*tch 5 url nginx django apache-2.2
我正在使用 django、nginx 和 apache。当我使用 URL(例如http://www.foo.com/)访问我的站点时,我的浏览器地址中出现的是附加了 admin 的 IP 地址(例如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>
Run Code Online (Sandbox Code Playgroud)
;
; ports.conf (apache)
Listen 127.0.0.1:8080
Run Code Online (Sandbox Code Playgroud)
;
; 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;
}
}
Run Code Online (Sandbox Code Playgroud)
;
; 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;
Run Code Online (Sandbox Code Playgroud)
它可能是你的 mod_rpaf 配置,我猜特别是“RPAFsethostname On”行。
我并不完全有信心,因为在谷歌搜索 10 分钟后,很明显 mod_rpaf 上几乎没有任何文档。这似乎是您只能在少数“我和我的奇特堆栈”博客文章中听到的事情。它解决了一个问题,您可以在 django 层中轻松解决这个问题,而不是由您在某些博客文章中读到的某个人运行一些神秘的 apache 模块。
它实际上在本书的中间件章节中有介绍:http://www.djangobook.com/en/2.0/chapter17/