awdriggs
By:
awdriggs

"502 Bad Request" NGINX and ghost

December 3, 2015 1.4k views
Ghost Nginx

I'm having a problem when trying to configure nginx with ghost. I'm did the manual vps install and not the one-click because I had made some changes to the ghost core, just set a new route to hit a index page instead of the blog.

I followed this tutorial to setup nginx https://www.digitalocean.com/community/tutorials/how-to-create-a-blog-with-ghost-and-nginx-on-ubuntu-14-04

here is the contents of my config.js file...

// # Ghost Configuration
// Setup your Ghost install for various [environments](http://support.ghost.org/config/#about-environments).

// Ghost runs in `development` mode by default. Full documentation can be found at http://support.ghost.org/config/

var path = require('path'),
config;

config = {
// ### Production
// When running Ghost in the wild, use the production environment.
// Configure your URL and mail settings here
production: {
url: 'http://adamdriggers.com',
mail: {},
database: {
client: 'sqlite3',
connection: {
filename: path.join(__dirname, '/content/data/ghost.db')
},
debug: false
},

server: {
host: '107.170.137.9',
port: '2368'
}
},

// ### Development **(default)**
development: {
// The url to use when providing links to the site, E.g. in RSS and email.
// Change this to your Ghost blog's published URL.
url: 'http://localhost:2368',

// Example mail config
// Visit http://support.ghost.org/mail for instructions
// ```
// mail: {
// transport: 'SMTP',
// options: {
// service: 'Mailgun',
// auth: {
// user: '', // mailgun username
// pass: '' // mailgun password
// }
// }
// },
// ```

// #### Database
// Ghost supports sqlite3 (default), MySQL & PostgreSQL
database: {
client: 'sqlite3',
connection: {
filename: path.join(__dirname, '/content/data/ghost-dev.db')
},
debug: false
},
// #### Server
// Can be host & port (default), or socket
server: {
// Host to be passed to node's `net.Server#listen()`
host: '127.0.0.1',
// Port to be passed to node's `net.Server#listen()`, for iisnode set this to `process.env.PORT`
port: '2368'
},
// #### Paths
// Specify where your content directory lives
paths: {
contentPath: path.join(__dirname, '/content/')
}
},

// **Developers only need to edit below here**

// ### Testing
// Used when developing Ghost to run tests and check the health of Ghost
// Uses a different port number
testing: {
url: 'http://127.0.0.1:2369',
database: {
client: 'sqlite3',
connection: {
filename: path.join(__dirname, '/content/data/ghost-test.db')
}
},
server: {
host: '127.0.0.1',
port: '2369'
},
logging: false
},

// ### Testing MySQL
// Used by Travis - Automated testing run through GitHub
'testing-mysql': {
url: 'http://127.0.0.1:2369',
database: {
client: 'mysql',
connection: {
host : '127.0.0.1',
user : 'root',
password : '',
database : 'ghost_testing',
charset : 'utf8'
}
},
server: {
host: '127.0.0.1',
port: '2369'
},
logging: false
},

// ### Testing pg
// Used by Travis - Automated testing run through GitHub
'testing-pg': {
url: 'http://127.0.0.1:2369',
database: {
client: 'pg',
connection: {
host : '127.0.0.1',
user : 'postgres',
password : '',
database : 'ghost_testing',
charset : 'utf8'
}
},
server: {
host: '127.0.0.1',
port: '2369'
},
logging: false
}
};

module.exports = config;

here is the contents of my nginx config

server {
    listen 80;
    server_name adamdrigger.com;
    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://127.0.0.1:2368;
    }
}

any ideas?

2 Answers

@awdriggs

Try changing:

        server: {
            host: '107.170.137.9',
            port: '2368'
        }

To:

        server: {
            host: '0.0.0.0',
            port: '2368'
        }

Under the production configuration. Specifically, we're simply swapping out the IP you have set with 0.0.0.0. If that seems odd, it's actually pretty common. Setting the IP to 0.0.0.0 doesn't nullify the IP or anything like that, it simply means that the server will utilize any IP (including your primary), whether it's the public IP or a Private IP.

If you've ever used PHP's internal web server, it's common to launch using 0.0.0.0:80 or another port choice. Upon using it, any accessed then routes accordingly.

The NGINX configuration is, however, correct and as it should be. While obvious, make sure you are restarting or reloading NGINX after all configuration changes as NGINX doesn't do this on it's own.

That was it. Thank you so much! I would have guessed that on my own. Leading "www" is working though, any idea why that would be the case?

Have another answer? Share your knowledge.