402v /posts/ghostbo-ke-da-jian-xi-lie-zhi-san-duo-zhong-yu-ming-fang-wen

Ghost博客搭建系列之三 - 多重域名访问

From Where:Ghost博客搭建系列之二 - Ghost博客的配置与更新

为一个VPS配置多个博客,或者用作其他用途的方法。涉及到较多的Linux开发知识,如果不需要这部分内容可直接看 Ghost博客搭建系列之四 - Octopress迁移部分的内容。

###多重域名访问 好久没有折腾服务器,刚好godaddy上的域名还没有过期,于是就把DigitalOcean的VPS配置了多个域名绑定,便于之后在搭建多个博客或者网站。

首先,在Godaddy上更改域名(oneboxapp.com)的Nameservers指向DNSPod,DNSPod配置这个域名也指向Droplet的IP;

第二步是配置Nginx服务器,Nginx的作用可以理解为一直在监听发送到这台服务器上的请求(80端口),当接收到请求之后nginx会根据请求的端口和域名等信息打开对应的网站根目录或者将请求转发给localhost的其他端口。

Ubuntu上nginx配置信息的所在目录是/etc/nginx,nginx启动时会读取这个目录下的nginx.conf文件,我们只看和虚拟主机相关的内容,除了这个文件可以配置Virtual Host外,在这个文件中还有这样两行: 说明这个文件在加载过程中还会加载conf.d目录下所有以conf为后缀名的配置文件以及sites-enabled目录下的所有文件,因此可以看到不管是将虚拟主机配置到这些文件中的哪些文件都是可行的,但为了标准化、后续开发维护的快速方便,我们把虚拟主机的配置放在sites-available目录下,然后通过软链接的方式链接到sites-enabled/目录下,Nginx就可以访问到配置信息了。

具体步骤如下:

  1. 拷贝/etc/nginx/site-available/ghost到另一个配置文件example.com

     cp /etc/nginx/sites-available/ghost /etc/nginx/sites-available/example.com
    
  2. 忽略调用#号注释掉的部分,default或者example.com中的内容如下:

     server {
     listen 80 default_server;
         listen [::]:80 default_server ipv6only=on;
    
     server_name your-blog-url.com;
    
     root /usr/share/nginx/html;
     index index.html index.htm;
    
     client_max_body_size 10G;
    
     location / {
             proxy_pass http://localhost:2368;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header Host $http_host;
             proxy_set_header X-Forwarded-Proto $scheme;
             proxy_buffering off;
     }
     }
    
  3. nginx只允许一个Virtual Host设置default_server,因此在example.com中去掉default_serveripv6only的配置;

  4. server_name部分替换成想要跳转的域名,如:another-blog-url.com,这样当nginx收到来自80端口的请求之后会根据域名来决定使用那个Virtual Host的配置;

  5. 只用于测试的话root部分可以保持不变,也可以新建一个简单页面到指定位置,如/var/www/example.com,那么root就修改成:

     root /var/www/example.com/html;
    
  6. 由于是从ghost的配置文件拷贝过来,处于安全性的考虑,ghost的行为是将80端口收到的请求转发到2368(ghost的监听端口),在example.com中我们不需要这个配置,因此location /部分改成如下这句即可:

     location / {
       try_files $uri $uri/ =404;
     }
    
  7. site-avaliable下的example.com配置文件创建成功之后内容如下:

     server {
     listen 80;
     listen [::]:80;
    
     server_name example.com;
    
     root /var/www/example.com/html;
     index index.html index.htm;
    
     location / {
       try_files $uri $uri/ =404;
     }
     }
    
  8. 接下来我们先看一下site-avaliablesite-enabled两个目录下的文件状态:

可以看到site-avaliable下有三个配置文件:defaultghost和我们刚刚创建的example.com,说明有三个网站在可以配置到nginx服务器上(这也是site avaliable代表的意思),那么具体nginx在收到请求后会转发到哪几个虚拟主机的配置文件,则是由site-enabled中创建的软链接决定。 8. 现在我们将example.com软链接到site-enabled目录下:

    ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

9. 到这里配置文件已经配置完成,但是由于我们修改了server_name,新的域名长度可能会超过nginx默认的长度要求,因此需要修改nginx.conf文件中的server_names_hash_bucket_size 配置项。打开nginx.conf

    vim /etc/nginx/nginx.conf

找到这个配置所在位置,去掉这一句前面的注释#

    server_names_hash_bucket_size 64;

这里写的长度是64byte,通常说来已经够用了,不过之前提到我的博客域名是thereisnoonewillbelievethatthisismyblogdomain.com,因此只此一个就已经超过了长度限制,改成128之后就没有问题了。no zuo no die...

  1. 重启nginx服务,使配置文件生效。

    service nginx restart
    

多重域名的设置已经全部完成,此时访问my-blog-url.comanother-blog-url.com会进入到不同的网站,至于网站的内容就看root所在目录的配置或者location指向的位置了。DigitalOcean也给了多重域名配置的教程,是以两个测试域名为例的。

#Where to go Ghost博客搭建系列之四 - Octopress迁移

评论 · 0

还没有评论。