一、nginx虚拟主机
1个虚拟主机相当于是一个网站
nginx中多个server标签
1.1 nginx相关错误
ping 域名
curl 域名(nginx服务)
nginx配置之后,要检查语法并reload
1.2 虚拟主机的常见类型
基于域名的虚拟主机:不同的域名访问不同虚拟主机(网站)
基于端口:不同的端口访问不同的虚拟主机----网站需要特殊端口的时候使用
基于IP虚拟主机:不同的IP地址访问不同的虚拟主机,在负载均衡的时候也会使用
实例1.2.1 基于域名的虚拟主机的配置
\\\在nginx进行配置
[root@web01 ~]# vim /etc/nginx/nginx.conf
……
server {
listen 80;
server_name www.oldboy.com;
location / {
root /usr/share/nginx/html/www;
index index.html index.htm;
}
}
server {
listen 80;
server_name blog.oldboy.com;
location / {
root /usr/share/nginx/html/blog;
index index.html index.htm;
}
}
\\\创建index.html文件
[root@web01 ~]# for i in www blog ;do echo $i.oldboy.com>/usr/share/nginx/html/$i/index.html;done
\\\检查语法
[root@web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
\\\平滑启动nginx服务
[root@web01 ~]# systemctl reload nginx
[root@web01 ~]# cat /usr/share/nginx/html/{www,blog}/index.html
www.oldboy.com
blog.oldboy.com
\\\新添加的域名一定要进行hosts解析
[root@web01 ~]# vim /etc/hosts
……
172.16.1.7 web01 www.oldboy.com blog.oldboy.com
……
\\\检查域名是否可用
[root@web01 ~]# curl www.oldboy.com
www.oldboy.com
[root@web01 ~]# blog.oldboy.com
实例1.2.2 基于端口的配置
\\\在nginx进行配置
[root@web01 ~]# vim /etc/nginx/nginx.conf
……
server {
listen 81;
server_name www.oldboy.com;
location / {
root /usr/share/nginx/html/www;
index index.html index.htm;
}
}
server {
listen 82;
server_name blog.oldboy.com;
location / {
root /usr/share/nginx/html/blog;
[root@web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 ~]# systemctl reload nginx
\\\检查配置之后的端口
[root@web01 ~]# ss -lntup|grep nginx
tcp LISTEN 0 128 *:81 *:* users:(("nginx",pid=51376,fd=10),("nginx",pid=30059,fd=10))
tcp LISTEN 0 128 *:82 *:* users:(("nginx",pid=51376,fd=11),("nginx",pid=30059,fd=11))
[root@web01 ~]# curl www.oldboy.com
curl: (7) Failed connect to www.oldboy.com:80; Connection refused
[root@web01 ~]# curl http://10.0.0.7:81
www.oldboy.com
[root@web01 ~]# curl http://10.0.0.7:82
blog.oldboy.com
[root@web01 ~]#
实例1.2.3 基于IP虚拟主机的配置
[root@web01 ~]# vim /etc/nginx/nginx.conf
……
server {
listen 10.0.0.7:80;
server_name www.oldboy.com;
location / {
root /usr/share/nginx/html/www;
index index.html index.htm;
}
}
server {
listen 10.0.0.9:80;
server_name blog.oldboy.com;
location / {
root /usr/share/nginx/html/blog;
index index.html index.htm;
}
}
}
"/etc/nginx/nginx.conf" 49L, 1004C written
\\检查报错,语法没错,但是里面的指定10.0.0.9这个端口在本地不存在
[root@web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: [emerg] bind() to 10.0.0.9:80 failed (99: Cannot assign requested address)
nginx: configuration file /etc/nginx/nginx.conf test failed
\\\因为新添加的10.0.0.0.9这个网段在本机没有,需要添加
[root@web01 ~]# ip addr add 10.0.0.9/24 dev eth0 label eth0:1
[root@web01 ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:36:af:f4 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.7/24 brd 10.0.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet 10.0.0.9/24 scope global secondary eth0:1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe36:aff4/64 scope link
valid_lft forever preferred_lft forever
[root@web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 ~]# systemctl restart nginx
[root@web01 ~]# ss -lntup|grep nginx \\检查端口
tcp LISTEN 0 128 10.0.0.9:80 *:* users:(("nginx",pid=51851,fd=7),("nginx",pid=51850,fd=7))
tcp LISTEN 0 128 10.0.0.7:80 *:* users:(("nginx",pid=51851,fd=6),("nginx",pid=51850,fd=6))
[root@web01 ~]# curl 10.0.0.7:80
www.oldboy.com
[root@web01 ~]# curl 10.0.0.9:80
blog.oldboy.com
[root@web01 ~]#
1.3 nginx处理用户请求过程※※※
http://nginx.org/en/docs/http/request_processing.html
1>看nginx配置中指定的端口
2>是否有我想要的域名(host)
如果有,使用这个虚拟主机
如果没有,使用默认的虚拟主机(第1个)
在这个配置中,nginx只测试请求的头字段“host”,以确定请求>应该路由到哪个服务器。如果它的值与任何服务器名称不匹配,或者请求根本不包含这个头字段,那么nginx将把请求路由到这个端口的默认服务器。在上面的配置中,默认服务器是第一个——这是nginx的标准默认行为。还可以通过listen指令中的default_server参数明确设置默认服务器:
> <pre style="padding: 0px; margin: 0px;">
server { listen 80 **default_server** ;
server_name example.net www.example.net;
...
}</pre>
二、nginx核心配置※※※
2.1 nginx日志格式
log_format:指定nginx日志格式
access_log:开启日志,指定日志文件
buffer=16k
flush=time
gzip 压缩
解压:gzip -d
看压缩包中的内容用以下命令:zcat、zless、zgrep、zmore、zegrep ,如:zcat /etc/nginx/conf.d/default.conf.gz
log_format日志格式的详细介绍
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
'$remote_addr \\客户端ip地址
$remote_user \\远程用户(空)
[$time_local] \\时间
"$request" \\请求报文的起始行 $request_uri 只取出uri
'$status \\状态码
$body_bytes_sent \\服务端发给客户端大小(每个文件的大小)
"$http_referer" \\记录着用户从哪里跳转过来的
'"$http_user_agent" \\用户浏览器
"$http_x_forwarded_for"'; \\负载均衡: web服务器用来记录用户真实ip地址
注:nginx -V:检查nginx所有的模块:
2.2 nginx配置文件切割
include文件包含(引用)
实例2.2.1 ##不同的虚拟主机如何指定不同的日志文件
[root@web01 ~]# vim /etc/nginx/nginx.conf
……
server {
listen 80;
server_name www.oldboy.com;
location / {
root /usr/share/nginx/html/www;
index index.html index.htm;
access_log /var/log/nginx/access_www.log main;
}
}
server {
listen 80;
server_name blog.oldboy.com;
location / {
root /usr/share/nginx/html/blog;
index index.html index.htm;
access_log /var/log/nginx/access_blog.log main;
}
}
"/etc/nginx/nginx.conf" 51L, 1102C written
[root@web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 ~]# systemctl reload nginx
[root@web01 ~]# ll /var/log/nginx/
total 12
-rw-r--r-- 1 root root 0 Jun 5 11:48 access_blog.log
-rw-r----- 1 nginx adm 5058 Jun 5 11:20 access.log
-rw-r--r-- 1 root root 0 Jun 5 11:48 access_www.log
-rw-r----- 1 nginx adm 2013 Jun 5 11:20 error.log
[root@web01 ~]#
实例2.2.2 在实际工作中会有很多的虚拟主机,都配置到/etc/nginx/nginx.conf 中会配置多的server标签,也不好管理,估将不同的server标签分为不同的文件
[root@web01 ~]# vim /etc/nginx/nginx.conf
……
include /etc/nginx/conf.d/*.conf;
}
[root@web01 ~]# vim /etc/nginx/conf.d/01-www.conf
server {
listen 80;
server_name www.oldboy.com;
▽ location / {
root /usr/share/nginx/html/www;
index index.html index.htm;
access_log /var/log/nginx/access_www.log main;
}
}
"01-www.conf" [New] 9L, 242C written
[root@web01 ~]# vim /etc/nginx/conf.d/02-blog.conf
server {
listen 80;
server_name blog.oldboy.com;
location / {
root /usr/share/nginx/html/blog;
index index.html index.htm;
access_log /var/log/nginx/access_blog.log main;
}
}
[root@web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 ~]# systemctl reload nginx
[root@web01 ~]# ll /etc/nginx/conf.d/
total 16
-rw-r--r-- 1 root root 242 Jun 5 12:00 01-www.conf
-rw-r--r-- 1 root root 246 Jun 5 12:00 02-blog.conf
-rw-r--r-- 1 root root 488 Apr 23 22:34 default.conf.gz
[root@web01 ~]# curl www.oldboy.com
www.oldboy.com
[root@web01 ~]# curl blog.oldboy.com
blog.oldboy.com
[root@web01 ~]#
注:将默认的站点目录default.conf用gzip压缩,不然会有影响,解压用gzip -d,查看gzip压缩用命令:zcat、zless、zgrep、zmore、zegrep
2.3 nginx状态模块机权限控制
配置状态模块
[root@web01 /etc/nginx/conf.d]# vim status.conf
server{
listen 80;
server_name status.oldboy.com;
stub_status on;
access_log off;
}
~
"status.conf" [New] 7L, 108C written
[root@web01 /etc/nginx/conf.d]# vim /etc/hosts
……
172.16.1.7 web01 www.oldboy.com blog.oldboy.com bbs.oldboy.com status.oldboy.com
[root@web01 /etc/nginx/conf.d]# systemctl reload nginx
[root@web01 /etc/nginx/conf.d]# curl status.oldboy.com
Active connections: 1
server accepts handled requests
13 13 13
Reading: 0 Writing: 1 Waiting: 0
[root@web01 /etc/nginx/conf.d]#
如果指定某个ip网段可以查看状态,其他网段都不能查看,进行以下设置即可
权限控制
未完……