0%

nginx学习笔记:虚拟主机配置

写在前面

这则笔记主要关于虚拟主机配置的内容,主要包括以下内容:

  • 虚拟主机配置

  • nginx支持php

  • 实践安装discuz

虚拟主机配置

nginx支持在同一台主机上部署多个网站,每个网站都相当于是虚拟主机。

虚拟主机基本配置步骤

  • 第一步:修改nginx.conf
1
2
3
4
5
[root@local-linux00 vhost]# vi /usr/local/nginx/conf/nginx.conf

//将server{} 中相关内容注释掉;
//在配置文件最后一个 } 之前加上 include vhost/*.conf; 这是一个相对目录,表示的是当前目录/usr/local/nginx/conf/下,设置一个文件夹vhost,用来存放虚拟主机配置文件。
//修改完成后,保存退出
  • 第二步:设置相关文件夹
1
2
3
4
5
6
7
8
9
//默认的网页文件保存在/usr/local/nginx/html目录中;
//虚拟主机文件目录/data/wwwroot/,在该目录中建立不同的字文件夹,用来保存不同的虚拟主机的网页内容

[root@local-linux00 data]# mkdir -p /data/wwwroot/
[root@local-linux00 data]# chown -R nginx:nginx /data/wwwroot/
[root@local-linux00 wwwroot]# mkdir discuz.com
[root@local-linux00 wwwroot]# touch discuz.com/index.html
[root@local-linux00 wwwroot]# echo 'discuz.com is fine' > !$
echo 'discuz.com is fine' > discuz.com/index.html
  • 第三步:修改虚拟主机配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//新建虚拟主机配置文件夹
mkdir -p /usr/local/nginx/conf/vhost/

//每个虚拟主机新建一个配置文件
至少要包括以下三项内容
touch /usr/local/nginx/conf/vhost/discuz.conf

vi /usr/local/nginx/conf/vhost/discuz.conf

//必须包括以下几项内容
server
{
listen 80;
server_name discuz.com;
index index.html index.htm index.php;
root /data/wwwroot/discuz.com/;
}

浏览器输入ip即可看到结果。

关于默认虚拟主机设置

nginx允许在同一台服务器上设置多个虚拟主机,比如我们可以再设置一个zrlog.com的主机。配置方法跟上面类似。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//配置zrlog.com
[root@local-linux00 wwwroot]# mkdir zrlog.com
[root@local-linux00 wwwroot]# touch zrlog.com/index.html
[root@local-linux00 wwwroot]# echo 'this is zrlog.com' > !$
echo 'this is zrlog.com' > zrlog.com/index.html
[root@local-linux00 wwwroot]# cd /usr/local/nginx/conf/vhost/
[root@local-linux00 vhost]# cp /usr/local/nginx/conf/vhost/discuz.conf zrlog.conf
[root@local-linux00 vhost]# vi !$
vi zrlog.conf
[root@local-linux00 vhost]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@local-linux00 vhost]# nginx -s reload

//校验结果
[root@local-linux00 vhost]# curl -x 127.0.0.1:80 discuz.com
discuz.com is fine

[root@local-linux00 vhost]# curl -x 127.0.0.1:80 zrlog.com
this is zrlog.com

在同时并存多个虚拟主机的情况下,如果不进行设置,在访问一个该主机上没有域名时,就以配置文件排序在前的为准。

1
2
3
由于discuz.conf 首字母排在zrlog.conf首字母的前面,因此系统默认
[root@local-linux00 vhost]# curl -x 127.0.0.1:80 log.com
discuz.com is fine

也可以手动进行设置,指定默认虚拟主机。

1
2
3
4
5
6
7
8
9
10
11
12
vi /usr/local/nginx/conf/vhost/default.conf

server
{
listen 80 default_server;
root /data/wwwroot/zrlog.com/;
}

//保存后重新加载
nginx -t

nginx -s reload

校验结果

相比较而言,另一种更合理策略是,访问该主机上不存在的域名时,直接拒绝,显示不存在,这样更符合行为逻辑。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
vi /usr/local/nginx/conf/vhost/default.conf

server
{
listen 80 default_server;
deny all;
}
//这里的deny all 会回复403错误。

//校验结果
[root@local-linux00 vhost]# curl -x 127.0.0.1:80 log.com
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>

泛解析

所谓泛解析就是域名只要符合某种规则的,都解析到同一地址。如下所示,在server_name 这一项中增加*.discuz.com之后,不管是1.discuz.com 还是 vesrerbef.discuz.com,都会解析到改目录下。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//修改配置文件
vi /usr/local/nginx/conf/vhost/discuz.conf
server
{
listen 80;
server_name discuz.com;
index index.html index.htm index.php;
root /data/wwwroot/discuz.com/;
}

//保存重新加载服务
nginx -t

nginx -s reload

//校验结果
[root@local-linux00 vhost]# curl -x 127.0.0.1:80 discuz.com
discuz.com is fine
[root@local-linux00 vhost]# curl -x 127.0.0.1:80 1.discuz.com
discuz.com is fine
[root@local-linux00 vhost]# curl -x 127.0.0.1:80 fdvfdvdfzbfd.discuz.com
discuz.com is fine

nginx支持php解析

在lnmp环境中,nginx负责提供web服务,并解析处理静态网页,而php是一服务的形式存在的,由nginx将需要php解析的内容转发给php-fpm来处理的,处理结果再反馈给nginx,一并反馈给用户。

实现这种转发的关键是修改配置文件,增加如下内容

1
2
3
4
5
6
7
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME [rootdir]$fastcgi_script_name;
}

说明:

  • fastcgi_pass用来指定php-fpm的地址,可以是socket或者是ip:port 如果php-fpm监听的是127.0.0.1:9000,那么这里也要改成相同地地址,否则会报502错误。

  • factcgi_parm SCRIPT_FILENAME后面的路径为该站点根目录,与之前root定义的路径一致,否则会报404错误。

示例:

按照上述方法修改zrlog.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
vi /usr/local/nginx/conf/vhost/zrlog.conf

server
{
listen 80 default_server;
server_name zrlog.com *zrlog.conf;
index index.html index.htm index.php;
root /data/wwwroot/zrlog.com;

location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/zrlog.com$fastcgi_script_name;
}
}

//修改保存后,在zrlog.com目录下新建一个info.php
//info.php作用是显示php配置信息
vi /data/wwwroot/zrlog.com/info.php

//加入如下内容
<?php
phpinfo();
?>

//重新加载服务
nginx -t

nginx -s reload

校验结果

实践部分

尝试在虚拟机上安装zrlog、discuz、dedecms

安装discuz

discuz是一套由中国人开发的通用的社区论坛软件系统,采用世界上最流行的web编程组合PHP+MySQL实现,用户可以在不需要任何编程的基础上,通过简单的设置和安装,在互联网上搭建起具备完善功能、很强负载能力和可高度定制的论坛服务。

实验教训:

总体来说,discuz安装几乎完全是傻瓜式的,但是因为本人虚拟机安装在mac上,在实验的过程还是遇到了一些坑,主要是chrome访问404,虽然命令行curl命令都能访问到,但是浏览器无法打开,后来总结了以下几个原因:

  1. chrome浏览器安装了https everywhere的插件,这个需要关闭;

  2. 修改host采用了ihost这个软件,免费版就很好用。

  3. surge需要关闭,即便是选择所有线路直连也不行,推测可以surge的权限比ihost要高,即便是surge选择直连,访问请求也会先经过他指定的dns,后来直接退出surge就可以了。

以下是在lnmp环境下安装discuz的步骤:

第一步:下载安装包文件

首先需要在discuz官网注册,登陆之后,在这里进行下载

这里采用的方式,直接在mac上下载好,discuz版本3.4,再通过ftp上传到虚拟机当中。

之后通过终端登陆虚拟机进行操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// usr/local/src 用来存放各种下载来的压缩包
cd /usr/local/src

//解压安装包
unzip ComsenzDiscuz-DiscuzX-master.zip

//进入安装包文件夹
[root@local-linux01 src]# cd DiscuzX

//移动安装文件(只需移动upload即可)
mv upload/* /data/wwwroot/discuz.com/
```

#### 第二步:数据库设置

//创建数据库
mysql> create database discuz;

//创建用户test及密码admin-123
mysql> grant all on discuz.* to ‘test‘@’localhost’ identified by ‘admin-123’;

//刷新生效
mysql> flush privileges;

1
2
3
4
5
6
7
8
9


#### 第三步:浏览器安装

这里还有一个插件检查,会提示权限错误。

![](https://farm2.staticflickr.com/1747/41587058725_4c92b3f077_o.png)

解决方法:这里的错误主要是由于文件权限不足造成的,我们使用chown目录将文件的owner做一下更改即可。

[root@stevey discuz.com]# chown -R php-fpm config/ data/ uc_client/data/ uc_server/data/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114

**注:**更改上述文件权限为777也可以解决问题。

下一步,安装数据库

![](https://farm2.staticflickr.com/1797/43175797795_8b24df63e4_o.png)

**注意:**

* 数据库名、数据库用户名、密码必须填写正确,跟之前设置的保持一致;这里使用信息如图所示。

* 下面的管理员密码也必须填写。

下面成功安装了,网站是这个样子的。

![](https://farm2.staticflickr.com/1799/44082301561_a6a88ac121_o.png)

### 安装zrlog

按照官方解释,zrlog是一种使用 Java 开发的博客程序,具有简约,易用,组件化,内存占用低等特点,支持Markdown 编辑器,让更多的精力放在写作上,而不是花费大量时间在学习程序的使用上。

第一步:下载相关数据包

要按照zrlog,前提是要在lnmp环境上增加以下两项:

* jdk 版本 >= 1.8

* tomcat版本 >= 8

jre、tomcat最好去官方网站,下载好再通过ftp上传到虚拟机;


第二步:安装jdk

//解压
tar -zxvf jdk-8u181-linux-x64.tar.gz

//创建安装目录
mkdir -p /usr/local/jdk1.8

//移动并重命名
mv jdk1.8.0_181/* /usr/local/jdk1.8

//编辑/etc/profile 文件配置环境变量
vim /etc/profile
//把这段配置写到最后面:
JAVA_HOME=/usr/local/jdk1.8/
JAVA_BIN=/usr/local/jdk1.8/bin
JRE_HOME=/usr/local/jdk1.8/jre
PATH=$PATH:/usr/local/jdk1.8/bin:/usr/local/jdk1.8/jre/bin
CLASSPATH=/usr/local/jdk1.8/jre/lib:/usr/local/jdk1.8/lib:/usr/local/jdk1.8/jre/lib/charsets.jar
//保存退出后,执行以下命令生效
source /etc/profile


//检查配置是否生效
[root@local-linux01 jdk1.8]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

第三步:安装tomcat

**注:**由于下载到是tomcat已经编译好的二进位制包,所以不用编译安装,只需要解压移动到指定文件夹,启动服务即可。

//解压
tar -zxvf apache-tomcat-8.5.32.tar.gz

//建立文件夹
mkdir -p /usr/local/tomcat

//移动重命名
mv apache-tomcat-8.5.32/* /usr/local/tomcat/

//进入tomcat文件夹
cd /usr/local/tomcat/

//启动tomcat
[root@local-linux01 tomcat]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

//校验是否启动
//查看java进程 ps -aux | grep java

[root@local-linux01 tomcat]# ps -aux | grep java
root 10349 3.0 8.1 2294076 81552 pts/0 Sl 22:44 0:04 /usr/local/jdk1.8/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
root 10505 0.0 0.0 112704 968 pts/0 S+ 22:47 0:00 grep --color=auto java

//查看监听端口 netstat -lnp| grep java
//可以看到,java监听了三个端口8080、8005、8009

[root@local-linux01 tomcat]# netstat -lnp| grep java
tcp6 0 0 :::8080 :::* LISTEN 10349/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 10349/java
tcp6 0 0 :::8009 :::* LISTEN 10349/java

//设置开机启动
echo "/usr/local/tomcat/bin/startup.sh" >> /etc/rc.d/rc.local

chmod a+x /etc/rc.d/rc.local


检验成果:浏览器输入 http://172.16.155.131:8080/

![](https://farm2.staticflickr.com/1832/30216634678_8987df33a5_o.png)

**重要:**

tomcat监听的是8080端口,但是lnmp环境中,提供httpd服务的nginx监听的是80,这里就需要修改nginx配置文件,通过nginx转发实现。

vi /usr/local/nginx/conf/vhost/zrlog.conf

[root@local-linux01 zrlog]# cat /usr/local/nginx/conf/vhost/zrlog.conf
server
{
listen 80 default_server;
server_name zrlog.com *.zrlog.com;
index index.html index.htm index.php info.php;
root /data/wwwroot/zrlog.com;

location ~ \.php$
{
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /data/wwwroot/zrlog.com$fastcgi_script_name;
}

//添加以下内容
//作用是将java请求转发到8080端口,交给tomcat处理
location ^~ /tomcat/ {
proxy_pass http://127.0.0.1:8080/;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

}

1
2
3
4

第四步:设置数据库

类似的,还需要设置一个数据库来存放zrlog的数据.

mysql> create database zrlog;
Query OK, 1 row affected (0.00 sec)

mysql> grant all on zrlog.* to ‘test‘@’localhost’ identified by ‘admin-123’;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
`

TroubleShooting: Mysql错误:Ignoring query to other database

解决思路:连接mysql时没有”-u”参数导致的;重新连接mysql,加上-u参数,一切正常。

第五步:安装zrlog

//把zrlog下载的包拷贝appBase里面,appBase支持自动解压war包的.
//默认appBase是/usr/local/tomcat/webapps/下
[root@local-linux01 src]#cp zrlog-1.7.1-baaecb9-release.war /usr/local/tomcat/webapps/

[root@local-linux01 src]# cp zrlog-1.7.1-baaecb9-release.war /usr/local/tomcat/webapps/

[root@local-linux01 src]# cd !$
cd /usr/local/tomcat/webapps/

[root@local-linux01 webapps]# ls
docs manager zrlog-1.7.1-baaecb9-release.war
examples ROOT
host-manager zrlog-1.7.1-baaecb9-release

//重命名安装文件
mv zrlog-1.7.1-baaecb9-release zrlog

//拷贝站点内容到站点目录
mv /usr/local/tomcat/webapps/zrlog/* /data/wwwroot/zrlog.com

浏览器安装,输入 http://172.16.155.131/tomcat/zrlog/install 这里的路径,其实是相对于/usr/local/tomcat/webapps/的路径

输入无误的话,如下图:

-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!