如何在同一个域中使用 Nginx 和 Gunicorn 运行 Django 和 Wordpress?
Posted
技术标签:
【中文标题】如何在同一个域中使用 Nginx 和 Gunicorn 运行 Django 和 Wordpress?【英文标题】:How to run Django and Wordpress using Nginx and Gunicorn at the same domain? 【发布时间】:2017-08-21 09:29:56 【问题描述】:我有一个在域上运行的 Django 应用程序,例如www.example.com
我想创建一个 Wordpress 登录页面,并将此登录页面指向主页 url www.example.com,并将 wordpress 管理站点指向 www.example.com/admin 或 www.example.com/wp-admin。所有其他 URL 都应由 Django 提供。
所以,我想要:
www.example.com -> wordpress www.example.com/admin 或 www.example.com/wp-admin -> wordpress 由 Django 提供的所有其他 URL到目前为止,这是我使用 Django 的 nginx 配置:
upstream django_server
server unix:/path/to/gunicorn.sock fail_timeout=0;
server
listen 80;
server_name www.example.com example.com
client_max_body_size 4G;
access_log /path/to/nginx-access.log;
error_log /path/to/nginx-error.log;
location /static/
alias /path/to/static/;
location /media/
alias /path/to/media/;
location /
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://django_server;
break;
error_page 500 502 503 504 /500.html;
location = /500.html
root /path/to/static/;
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:WordPress 使用一组不确定的 URL,因此在它和 Django 可用的 URL 集之间有一个明确的划分是很重要的。最好的解决方案是将 WordPress 放到一个子目录中(这非常容易)。
例如:
server
...
# existing Django configuration
...
location = /
return $scheme://$host/blog/;
location ^~ /blog
alias /path/to/wordpress;
index index.php;
if (!-e $request_filename) rewrite ^ /blog/index.php last;
location ~ /wp-content/uploads/ expires 30d;
location ~ \.php$
if (!-f $request_filename) rewrite ^ /blog/index.php last;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
...
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$
if (!-f $request_filename) rewrite ^ /blog/index.php last;
expires 30d;
您需要设置站点和主页 URL。详情请见this document。
请参阅this document 了解更多信息。
【讨论】:
谢谢@richard-smith。我试过你的解决方案,它有效:) 这很快!以上是关于如何在同一个域中使用 Nginx 和 Gunicorn 运行 Django 和 Wordpress?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Nginx 在同一域中具有不同位置的多个配置(React App)