为ghost博客配置nginx服务器

为ghost配置nginx,基本配置很简单

在/etc/nginx/sites-available/下新建一个ghost.conf文件,并软链接到/etc/nginx/sites-enabled/ghost.conf

ln -s /etc/nginx/sites-available/ghost.conf /etc/nginx/sites-enabled/config.conf  

ghost.conf的内容如下

upstream www {  
    server 127.0.0.1:2368;
}
server {  
    listen 80;
    server_name duxiutao.com;
    access_log /opt/nginx.log;  

    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_connect_timeout  60s;
        proxy_pass         http://www;
    }
}

502 gateway error

如果ghost/config.js中配置的IP地址是真实的地址(config.production.server.host),即域名对应的IP地址,则,upstream中的IP地址要写成真实的IP地址,如果写成127.0.0.1,会报错:502 Gateway error。config.js的内容片断:

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

        server: {
            host: '127.0.0.1', // <--nginx里面配置proxy_pass时的IP地址要与此处保持一致
            port: '2368'
        }
    },

这里的server.host如果配置成真实地址23.88.238.247,则在23.88.238.247上访问127.0.0.1:2368会返回Connection refused

$ wget http://127.0.0.1:2368
--2017-05-06 12:26:45--  http://127.0.0.1:2368/
Connecting to 127.0.0.1:2368... failed: Connection refused.  

如果在nginx里配置proxy_pass到127.0.0.1,则nginx将总是返回502 Gateway error


如果不知道502的真正含义,将会很难定位到问题根本原因,看字面意思会觉得网关错误一定是nginx的问题,其实,502的真正含义是:代理或网关所访问的真正的服务器报错了。知道了这一点,定位问题时就不会把注意力全部放到nginx上,而是放到真正的服务器上去