【问题标题】:How to run Django and Wordpress using Nginx and Gunicorn at the same domain?如何在同一个域中使用 Nginx 和 Gunicorn 运行 Django 和 Wordpress?
【发布时间】: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/;
    }
}

任何帮助将不胜感激。

【问题讨论】:

    标签: django wordpress nginx deployment gunicorn


    【解决方案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。我试过你的解决方案,它有效:)
    • 这很快!
    猜你喜欢
    • 2017-03-27
    • 2021-10-06
    • 2019-06-19
    • 2022-01-14
    • 2020-05-18
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多