Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to run django and wordpress on NGINX server using same domain?

I have tried many ways but do not know how to run Django on example.com and wordpress on example.com/blog

The following running project directory structure for Django and Wordpress.

Django app dir- /home/ubuntu/django

Django app running successfully on - example.com:8000

Wordpress dir - /var/www/html/blog

Wordpress running successfully on - example.com

Nginx configuration

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /var/www/html/blog;
    index index.php index.html index.htm;

    server_name example.com;

    location / {
            # try_files $uri $uri/ =404;
            try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    error_page 404 /404.html;

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
            root /usr/share/nginx/html;
    }

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
    }
}

Note- Django app running by gunicorn, I know the subdomain may be the solution but I do not want that.

How to write nginx configuration for both Wordpress and Django to run Django app on example.com and Wordpress on example.com/blog ?

like image 672
Mukesh Avatar asked Nov 14 '16 02:11

Mukesh


People also ask

Does Django work with Nginx?

You'll use Django as the framework at the core of your web app, using it for URL routing, HTML rendering, authentication, administration, and backend logic. In this tutorial, you'll supplement the Django component with two other layers, Gunicorn and Nginx, in order to serve the application scalably.

Can I host Django website on WordPress?

You must convert Django to WordPress considering that WordPress websites can scale to meet the growing needs of your business and more importantly are extremely easy to use and maintain. This isn't true for Django websites as their maintenance require a steep learning curve.


2 Answers

Thanks alex for helping me out to solve this problem.

Here is the solution

Django app dir- /home/ubuntu/django

Wordpress dir - /var/www/html/blog

NGINX Conf file

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    server_name example.com;

    location / {
            proxy_pass http://127.0.0.1:8000;
            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;
            proxy_set_header X-Forwarded-Proto $scheme;
    }

    location ~ /blog/.*\.php$ {
            root /var/www/html;
            index index.php index.html index.htm;
            set $php_root /var/www/html/blog;

            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
    }

    location /blog {
            root /var/www/html;
            index index.php index.html index.htm;
            set $php_root /var/www/html/blog;

            try_files $uri $uri/ /blog/index.php;
    }

location /static/ {
            alias /home/ubuntu/django/your_app_name/static/static_root/;
    }

    location /media/ {
        alias /home/ubuntu/django/your_app_name/media/ ;
    }

}

Note- please replace your home and siteurl with http://example.com/blog in wp-location table of wordpress

Now Your Django app running on example.com

Now Your Blog running on example.com/blog

like image 85
Mukesh Avatar answered Oct 12 '22 09:10

Mukesh


As i understand you have a server running your django site and one running your wordpress site. if so you can do something like this:

{
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    server_name example.com;

    access_log /var/log/nginx/example-access.log;

    location / {
        proxy_pass         http://127.0.0.1:3001;
        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;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }

    location /blog/ {
        proxy_pass         http://127.0.0.1:(wordpress port);
        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;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

if you need to server the php blog from ngix no apache in the middle use somethon like:

location ~ /blog/.*\.php$ {
    root /var/www/html/blog;
    index index.php index.html index.htm;
    set $php_root /var/www/html/blog;

    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $php_root$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
}
like image 1
alex Avatar answered Oct 12 '22 07:10

alex