需求

在阿里云申请了两个域名,一个已经给了fullmoon,是flask 的习作,给夫人写写小文章用。另一个计划给自己的静态博客kukumalu.cc使用,主要专注于内容。

只有一台服务器,原先计划是通过不同的端口访问。搜索许久,Nginx vhost更简便、更适合分开管理。

方案

  • /etc/nginx 新建文件夹vhost
mkdir vhost
  • 链接,将下面两份文件链接或复制到vhost

静态博客配置

server {
    listen         80;
    server_name    kukumalu.cc www.kukumalu.cc;

    charset        utf-8;

    root           /home/app/negativedearc.github.io/output;
    location / {
        index     index.html;
    }
}

动态博客配置

server {
    listen       80;
    server_name  cxwloves.cc www.cxwloves.cc;

    charset      utf-8;

    location / {
        proxy_pass        http://localhost:5000;
        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  Host $host;
        proxy_pass_header Set-Cookies;
        proxy_temp_path   /tmp/nginx;
    }
}
  • 修改nginx主conf,在/ect/nginx/nginx.conf的virtual host configs加入一行include /etc/nginx/vhost/*.conf;

  • 重启nginx 服务生效,在之前可能要关掉原有服务

ps -ef|grep nginx
kill -s 9 xxxxx
sudo service nginx restart

遭遇错误

然而重启服务测试网站却遭遇了错唔net::ERR_CONTENT_LENGTH_MISMATCH,查看/var/log/nginx/error.log发现

2017/10/18 23:23:51 [crit] 6443#6443: *628 open() "/var/lib/nginx/proxy/6/02/0000000026" failed (13: Permission denied) while reading upstream, client: 49.75.65.34, server: cxwloves.cc, request: "GET /cxw/static/highlight.js/highlight.min.js HTTP/1.1", upstream: "http://127.0.1.1:5000/cxw/static/highlight.js/highlight.min.js", host: "cxwloves.cc", referrer: "http://cxwloves.cc/cxw/blog/article/59f71dde-e2a4-11e6-b834-f4066974556c"

推测可能是修改了nginx配置后,用户没有权限写入缓存文件夹导致错误。解决方法如下

  • 新建一个tmp文件夹
  • 赋予nginx配置文件中的用户权限
  • 在配置中更新tmp目录
root@dearc:/# cd /tmp/
root@dearc:/tmp# mkdir nginx
root@dearc:/tmp# chown www-data nginx/
root@dearc:/tmp# ll nginx/
total 8
drwxr-xr-x  2 www-data root 4096 Oct 19 11:38 ./
drwxrwxrwt 10 root     root 4096 Oct 19 13:42 ../

最后不要忘记在服务配置中写入缓存目录

server {
    ...
    location / {
        ...
        proxy_temp_path   /tmp/nginx;
    }
}