nginx下由单站点建立多站点

最近一个朋友也想开一个博客,但是又不喜欢折腾服务器之类的东西,正好我觉得一个VPS上只用于建一个没有什么流量的设备也是很浪费,于是两个商量了一下,决定使用在一台vps上搭建两个站,要求能够做到:

  • 两个站点之间完全独立,相互不干扰;
  • 站长能够独立的操作后台数据而不需要root权限;
  • 数据库具有独立性

下面说一下配置过程。

一、配置现状

目前vps与blog的配置现状是这样的。

  1. 操作系统ubuntu16.04,内核是linux4.9
  2. vps上已搭建好一个wordpress博客网站,根目录为/var/www
  3. 该博客已经绑定好域名。
  4. nginx已为当前的配置完毕,配置文件为/etc/nginx/available-site/default,同时该文件在/etc/nginx/sites-enabled/下有链接,从而保证配置生效
  5. 系统为单用户,假设用户名为yinflying

现需要达到目标:

  1. 建立新的博客,网站的根目录为/var/www2。
  2. 修改nignx配置,实现域名(域名为youngpeng.top)绑定和访问。
  3. 建立新的用户,该用户能够后台修改博客源码。
  4. 增强vps的安全设置,新用户不具有su的权利

二、nginx实现一机多站

实际wordpress本身也是能够实现子域名和多站点的实现,然而这种实现方法是需要共用部分数据的,从独立性上来说,不够高。所以最好的方式是使用nginx配置的多站点配置。

目前网上大多教程都是把配置文件展示出来,却不说为何这样,原因也不作任何说明,看完之后云里雾里,完全不知道如何适应性的修改。实际上nigx实现多站点非常简单:就是根据访问的网站,然后使用server_name进行通配符或正则匹配,根据匹配结果选择所要去的站点,如果没有匹配上,就会使用默认的站点。

2.1 具体配置

查看/etc/var/nginx/sites-enabled/default文件(该文件实际为/etc/nginx/sites-available/default的链接),一般情况会有下面几个配置(在server{}中):

    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /var/www;
    index index.php index.html index.htm;
    server_name localhost;

首先,该配置文件声明当前的配置(yinflying.top)为default_server,其次,定义yinflying.top的根目录为/var/www,而该配置文件明显正确的,有效的(因为已经能够正常运行了!)。所以只需要将该文件复制一份,然后修改一下用户(域名)相关的配置就好了。

必须注意的是,之前server_name为localhost,这个是默认配置,几乎没有什么用,由于该配置已经绑定域名了,所以需要将localhost改为yinflying.top,然后再重启nginx服务,使用域名查看自己的网站是否能够正常访问,如果配置正常的话,这一步是不会出问题的。然后将当前配置复一份:

$ cp  /etc/nginx/sites-available/default /etc/nginx/sites-available/youngpeng

由于新域名和本VPS的IP还未绑定,这个时候可以采用VPS的IP来访问这个新站。假设VPS的IP为123.123.123.123,则上面的配置头可以改成这样:

   listen 80 ;
   listen [::]:80 ipv6only=on;

   root /var/www2;
   index index.php index.html index.htm;
   server_name 123.123.123.123 youngpeng.top;

这样就可以保证可以使用IP和域名来访问来自/var/www2处的网站了。保存后,创立链接,使配置有生效的能力:

$ ln -s /etc/nginx/sites-available/youngpeng /etc/nginx/sites-enabled/youngpeng

再重启nginx服务器即可。

2.2 效检配置

如何说明当前nginx配置成功了呢?只需要访问yinflying.top123.123.123.123是不同的网站就可以了。不过由于/var/www2还不存在,所以需要先新建一个测试网页:

$ sudo mkdir /var/www2
$ sudo echo "Hello world" > /var/www2/index.html

如果出现”Hello world”的网站就没有问题了。

2.3 nignx无法启动的问题

如果出现nginx服务启动failed,这个时候需要去查nginx的日志,日志文件为/var/log/nginx/error.log,根据里面的内容寻找相应的错误原因。比如说:如果配置文件中出现了两以上的default server,它就提示:出现重复的default server了。

三、建立新站

建立一个新的wordpress站,主要有两个步骤:

  • 将wordpress的文件丢到网站根目录下;
  • 建立一个新的数据库;

3.1 wordpress下载

该部分比较简单,相信对于已经建过站的人来说已经是轻车熟路了wordpress官网:

# 记得下载最新版!
$ wget https://cn.wordpress.org/wordpress-4.8.1-zh_CN.tar.gz
$ tar -zxvf wordpress-4.8.1-zh_CN.tar.gz
$ sudo cp wordpress-4.8.1/* /var/www2/

这个时候自然可以通过IP地址直接访问到wordpress安装网页了。

3.2 新的数据库建立

显然,wordpres安装是需要数据库的。而别的用户也要求有数据访问权利,为了保证数据库的安全,需要给添加新的用户,建立新的数据。

$ mysql -u root -p
$ > password
# 创建一个名叫"youngpeng",密码为"123456"的用户
$ > insert into mysql.user(Host,User,Password) values("localhost","youngpeng",password("123456"));
# 创建一个新的数据库wpyp(注意数据库命名中不能含有奇怪字符)
$ > create database wpyp;
# 授权youngpeng用户拥有wpyp数据库所有权限
$ > grant all privileges on wpyp.* to youngpeng@localhost identified by '123456';
# 刷新表
$ > flush privileges;

一个比较有意思的事实是,新的用户是无法改自己的密码的,只要root用户才可以改,改正命令为:

$ > update mysql.user set password=password('新密码') where User="youngpeng" and Host="localhost";
$ > flush privileges;

这样就建立起一个用户名为youngpeng,数据库名为wpyp,密码为123456的数据库,而这些数据在wordpress开始安装的时候都需要填的。

3.3 安装wordpress

这一步没有什么特别好要说的,无非是打开网站,填入相应的参数安装即可。

四、增加用户的后台修改能力

上面youngpeng虽然拥有前台的修改能力,但是如果网站出问题了,那么就没有没有办法了。这个时候需要该用户具有后台修改的能力。后台修改就涉及到linux多用户的问题。

4.1 增加linux用户

这个时候给后台增加一个名叫youngpeng的用户,方法如下:

$ sudo mkdir /home/youngpeng
$ sudo useradd -d  /home/youngpeng youngpeng
$ sudo chown  youngpeng:youngpeng /home/youngpeng
$ sudo chmod 700 /home/youngpeng
$ sudo passwd youngpeng

这样新建一个用户就完成了。

4.2 修正网站根目录权限

为了保证youngpeng用户能够修改网站的根目录,同时又能够做到不影响其它目录,只需将网站根目录下的所有文件的用户组修改为youngpeng,然后给组权限加上可读可写即可。

$ sudo chgrp -R youngpeng /var/www2
$ sudo chmod -R g+r /var/www2
$ sudo chmod -R g+w /var/www2

4.3 开启wheel组

显然,开启了多用户之后,root的安全性就变得非常重要,这个时候就要关闭普通用户su的权利,保证只有wheel用户组用户才获取root权限。而ubuntu16.04默认情况下是没有wheel用户组的,这个时候就需要手动添加开启(将yinflying加入wheel):

$ sudo groupadd -g 201 wheel
$ sudo usermod -aG wheel yinflying

然后再打开/etc/pam.d/su文件,将# auth required pam_wheel.so 前面的注释#去掉即可。

注意:一定要保持当前root持续在线,否则有可能会导致永远无法登陆root! 这个时候需要另开一个终端进行测试,而不是当前直接退出root测试。

此条目发表在LINUX, 网络建站分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。