Nginx的虚拟主机的配置
虚拟主机:当一个机器上要跑多个站点,即多个域名的时候,这就需要虚拟主机来定义
配置虚拟主机,先将主配置文件下的server注释掉,添加一个include vhost/*.conf
再在conf目录下创建一个vhost目录
我有两个站点:www.1.com ,www.2.com
编写两个虚拟主机配置文件:
[root@shuai-01 vhost]# vim www.1.com.conf
server {
listen 80;
server_name www.1.com;
root /data/wwwroot/www.1.com;
}
[root@shuai-01 vhost]# vim www.2.com.conf
server {
listen 80;
server_name www.2.com;
root /data/wwwroot/www.2.com;
}
两个的网站目录:
[root@shuai-01 vhost]# mkdir /data/wwwroot/www.1.com/
[root@shuai-01 vhost]# mkdir /data/wwwroot/www.2.com/
[root@shuai-01 vhost]# echo "www.1.com" > /data/wwwroot/www.1.com/index.html
[root@shuai-01 vhost]# echo "www.2.com" > /data/wwwroot/www.2.com/index.html
访问测试:
[root@shuai-01 vhost]# curl -x127.0.0.1:80 www.1.com
www.1.com
[root@shuai-01 vhost]# curl -x127.0.0.1:80 www.2.com
www.2.com
设置一个默认虚拟主机,将所有访问错误的域名都给deny掉,不让访问:
没设置前:
[root@shuai-01 vhost]# curl -x127.0.0.1:80 www.3.com
www.1.com
设置:
[root@shuai-01 vhost]# vim default.conf
server {
listen 80 default_server;
deny all;
}
设置后:
[root@shuai-01 vhost]# /usr/local/nginx/sbin/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@shuai-01 vhost]# /usr/local/nginx/sbin/nginx -s reload
[root@shuai-01 vhost]# curl -x127.0.0.1:80 www.3.com
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.14.0</center>
</body>
</html>
Nginx默认虚拟主机
不管什么域名解析到该服务器,都会访问到默认虚拟主机
nginx.conf中第一个server { }
或 listen 80 default_server;
泛解析 *.aming.com
Nginx虚拟主机配置规范
主配置文件include虚拟主机配置文件
在conf目录下创建vhost目录,在vhosts目录下面定义虚拟主机配置
Nginx基于端口的虚拟主机
listen端口不同,server_name可以相同
nginx的rewrite
域名跳转(重定向)、URL重写(伪静态)、动静分离(跳转域名,并接入CDN实现加速)
依赖PCRE库
模块:ngx_http_rewrite_module
Rwrite相关指令:
-
if (条件) { command }
格式:if (条件判断) { 具体的rewrite规则 }
条件判断类容由内置变量,逻辑判断符号和目标字符串组成
内置变量是Nginx提供的。如:$request_method(请求方法),$request_uri(uri)
逻辑判断符号:=(等于),!=(不等于), ~(匹配),~*(不区分大小写匹配),!~(不匹配),!~*(不区分大小写的不匹配) -
break和last
nginx的location匹配是从上到下一直匹配完的,匹配到了还要继续执行下面的。break和last都有跳出匹配,break跳出是不执行下面的location,last跳出本location,还继续执行下面的location
break和last详解 -
return 后面跟状态码、URL、text(支持变量)
直接写状态码,状态码(301,302)后面跟URL,状态码后面跟变量(字符串或json)
return指令详解 -
rewrite规则
该指令一般用于对请求的客户端直接返回响应状态码。在该作用域内return后面的所有nginx配置都是无效的。
可以使用在server、location以及if配置中。
除了支持跟状态码,还可以跟字符串或者url链接。
rewrite规则详解
rewrite_log定义rewrite日志 rewrite_log on; 写到error_log notice级别