如何在一个服务器上分发多个域名?

关于博客网站域名的配置

之前做过域名的配置,所以上手起来不是很麻烦,所以顺便做了

关于域名的购买、备案和 DNS 解析就不讲了,网络上一抓一大把,文章的重点在于“如何在一个服务器上分发多个域名?“

当前域名配置思路就三层:

  • 外网只暴露 nginx 的 80 端口;nginx 根据 server_name = blog.rose7.cn 接住请求。
  • Hugo 生成站点时,生产地址固定写成 http://blog.rose7.cn/,不再用 IP。
  • nginx 不直接对外暴露站点目录,而是把请求转发到服务器内部的端口;这个内部端口再指向 /var/www/blog/current 这份当前发布版本。

核心思想在于利用 nginx 通过对域名的识别来分发请求到各个端口

具体的 nginx 配置文件如下

server {
    listen 127.0.0.1:8081;
    server_name _;

    root /var/www/blog/current;
    index index.html;

    location / {
        try_files $uri $uri/ $uri.html =404;
    }
}

server {
    listen 80;
    listen [::]:80;
    server_name blog.rose7.cn;

    location / {
        proxy_pass http://127.0.0.1:8081;
        proxy_http_version 1.1;
        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;
    }
}

处理流程是:

  1. 外部用户访问 blog.rose7.cn
  2. nginx 在 80 端口接住
  3. 再转发到本机内部博客运行端口,再从 /var/www/blog/current 读静态文件