Nginx + Nodejs + WordPress routing

So I installed Nginx, Nodejs, PHP, MySQL and WordPress on ec2 server.
The node app works fine using the root dir and [example.com] as example.
When trying to access the blog in [example.com/blog], I get an 404 error in the logs and a screen message Cannot GET /blog.

What am I doing wrong in this nginx config file?

Read More
server {
    listen 80;
    server_name example.com;
    access_log /var/log/nginx/mysite.log;

    # pass the request to the node.js server with the correct headers and much more can be added, see nginx$
    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
      proxy_pass http://example.com:3000;
      proxy_redirect off;
    }
    location /blog/ {
            # try_files $uri $uri/ =404;
            root /home/ec2-user/mysite/blog;
            try_files $uri $uri/ /index.php?q=$uri&$args;
            # proxy_pass http://example.com/blog;
    }

    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/php-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
            # proxy_pass http://example.com/blog;

    }
 }

EDIT:
After gathering tips from various tutorials, my config file looks like this:

 server {
listen 80;
server_name example.com;
access_log /var/log/nginx/nginx-access.log;
error_log /var/log/nginx/nginx-error.log;
root /home/ec2-user/example;

# pass the request to the node.js server with the correct headers and much more can be added, see nginx$
location / {
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $http_host;
  proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
  proxy_pass http://example.com:3000;
  proxy_redirect off;
}

location /blog/ {
    index index.php;
    try_files $uri $uri/ /index.php?q=$uri&$args;

     location ~ .php$ {
        try_files $uri =404;
        include fastcgi.conf;
        fastcgi_split_path_info ^()(.*)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index index.php;

        }

        if (!-e $request_filename)
        {
            rewrite ^(.+)$ /index.php?q=$1 last;
        }
}
 location ~* ^.+.(jpg|jpeg|gif|png|ico|css|js|ttf|woff|eot|svg)$ {
    alias   /home/ec2-user/example/public;
}

}

The 404 isn’t fixed though…ANY help will be appreciated.

Related posts

Leave a Reply

2 comments

  1. Finally the routing for both node and wordpress works! (with the help of this answer)

     server {
    listen 80;
    server_name example.com;
    access_log /var/log/nginx/nginx-access.log;
    error_log /var/log/nginx/nginx-error.log;
    root /home/ec2-user/example;
    
    # pass the request to the node.js server with the correct headers and much more can be added, see nginx$
    location / {
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Host $http_host;
          proxy_set_header X-NginX-Proxy true;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
          proxy_pass http://example.me:3000;
          proxy_redirect off;
         location ~* ^.+.(jpg|jpeg|gif|png|ico|css|js|ttf|woff|eot|svg)$ {
            alias   /home/ec2-user/example/public;
        }
    }
    
    
    location @blog {
      rewrite ^/blog(.*) /blog/index.php?q=$1;
    }
    location /blog {
        index index.php;
        try_files $uri $uri/ @blog;
        alias /home/ec2-user/example/blog;
    
         location ~ .php$ {
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            fastcgi_pass 127.0.0.1:9000;
            }
    
            #if (!-e $request_filename)
            #{
            #   rewrite ^(.+)$ /index.php?q=$1 last;
            #}
    } }
    
  2. I was working with centos linux distro had a few changes to make to

    server {
    listen 80;
    server_name example.com;
    
    access_log /var/log/nginx/nginx-access.log;
    error_log /var/log/nginx/nginx-error.log;
    
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass http://127.0.0.1:5000;
        proxy_redirect off;
        proxy_set_header   X-Forwarded-For $remote_addr;
    
    
        error_page 404 /404;
        error_page 500 502 503 504 /404;
    
        location ~ (jpg|jpeg|gif|png|ico|css|js|ttf|woff|eot|svg|js|css) {
          root   /var/www/html/example/views;
        }
    }
    
    location @blog {
        rewrite ^/blog(.*) /blog/index.php?$args;
    }
    
    location /blog {
        index index.php;
        try_files $uri $uri/ @blog;
        alias /var/www/html/blog;
    
        location ~ .php$ {
            try_files $uri =404;
            fastcgi_pass unix:/var/run/php-fpm/www.sock;
            fastcgi_index   /blog/index.php;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            include fastcgi_params;
        }
    
    
        #if (!-e $request_filename)
        #{
        #   rewrite ^(.+)$ /index.php?q=$1 last;
        #}
    }
    

    }