server标签,也叫虚拟主机
server {
listen 80;
#可以修改为不常用的端口
server_name www.syya.com;
#可以一次添加多个域名,以空格为分隔符,以;结尾,使用IP的话只能写自己网卡的IP
location / {
#server里面/就代表站点目录,浏览器默认在域名或IP后面加根,这里`location /`可以省略
root /code/syy1;
#root指定站点目录的位置,随意指定,记得创建,用户访问域名后跳转到的服务器上的位置
index index.html;
#HTML文件要放到站点目录下面,名字可以修改,可以写多个N.html(只匹配第一个可以匹配到的)(必须以.html或者以.htm结尾 )
#可以省略,但是前提是站点目录下面必须有index.html
}
location /index.html { #(/代表站点目录),当输入的域名后面带路径,只能跟index.html(废物),然后可以删掉下面的index(废物)
root /code/syy2;
index index.html;
}
}
#服务器找不到客户想要的页面的时候,加载站点目录下的N.html页面(要在这里指定),
#如果没有N.html的话,就使用默认报错(404 Not Fount )
#每个公司的404页面都是修改过的
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
#想要使自定义server生效,阿里云nginx需要注释主配置文件中的server,
#想要使自定义server生效,yum官方nginx需要删除或者压缩conf.d下面的default.conf
修改配置文件后需要reload,
源码nginx可以包含,阿里云nginx不可以包含
Nginx虚拟主机
Nginx配置虚拟主机有如下三种方式:
方式一、基于主机多IP方式
方式二、基于端口的配置方式
方式三、基于多个hosts名称方式(多域名方式)
企业xx环境:
- 开发环境(6台)开发出来自己跑
- 测试环境(6台)(一般基于端口做nginx网站)
- 性能测试(开发测试后,在这再次测试)
- 功能测试(外网测试,内网测试)
- 预发布环境(6),玩游戏,不删档内测。删档内测,beta(让用户一起来测试)
- 生成环境(用域名做网站)
1.配置多网卡多IP的方式(避免大流量的情况,降低网卡负载)
虚拟机界面添加网卡(多网卡)
2.配置单网卡多IP的方式(IP冲突?)(企业也很少有,一般用端口或域名 来做不同的网站)
server_name ip1 ip2 ip3;
同一区域网下,一个网卡下面配置多个网站,如果都使用IP来访问的话,会造成IP冲突(用 nginx -s reload 可以看到),解决方法就是添加多块网卡,或者添加虚拟网卡,或修改端口
所以说,#同一区域网下,不同路由器,网卡下面的IP不可以相同,会冲突,(浏览器访问改IP,找哪个网站?)
解决方法:
1.虚拟机界面添加网卡(一台虚拟机最多有4块网卡)
2.添加虚拟网卡,(虚拟网卡 叫VIP)
1>#添加虚拟网卡
ifconfig eth0:0 10.0.0.100/24
ifconfig eth0:1 10.0.0.101/24
2>#绑定虚拟网卡IP
#取消虚拟网卡VIP的使用:(ifconfig可以查看)
ifconfig eth0:0 done
ifconfig eth0:1 done
3.多端口(测试环境常用)
#不能使用常用端口
同一区域网下,一个网卡下面配置多个网站,如果都使用IP来访问的话,会造成IP冲突,如果非得使用IP访问的话,那就只能修改端口了,这样使用浏览器访问的时候加上端口,就可以区分不同的网站了
4.多域名(生产环境使用)
同一主机或者不同主机,域名可以随便起,不一样就行
#配置域名要进行域名解析(windows解析,虚拟机解析,谁用谁解析)
nginx日志管理
nginx server标签里指定了局部日志的话,那么这个网站的日志就放到局部日志
如果在server标签里没有指定局部日志,那么这个网站的日志就放到全局日志
无论是全局日志还是局部日志,都不会自动删除,除非使用第三方软件删除(logrotate)
nginx日志里面的分隔符随意,目的是区分输出的空格和原有的空格,| · ` `(特殊符号)不需要转义
#日志格式(log_format main)
log_format main 'lbIP$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 #客户端访问网站之前使用的cdn(代理)的IP地址(服务端lb网关IP 或者自己网关的IP)(可以拼凑)
$remote_user #记录客户端用户名(登录网站使用的用户名,不需要登录的话就是空)
$time_local #记录通用的本地时间(是当前服务器的显示时间)
$time_iso8601 #记录iso标准格式下的本地时间
$request #记录请求的方法以及请求的http协议(无论有没有访问成功,都会记录)
$status #记录请求的状态码,用于定位错误信息
$body_bytes_sent #发送给(浏览器显示的)客户端的资源字节数,不包括响应头的大小,走浏览器缓存的话,显示为0,返回404的话是有一定大小的(包含回车)
$bytes_sent #发送给客户端的总字节数
$msec #日志的写入时间,单位为秒,精度是毫秒
$http_referer #记录是从哪个链接访问过来的
$http_user_agent #记录客户端浏览器的相关信息(相关配置)
$http_x_forwarded_for #记录源客户端IP地址
$request_length #请求的长度,包括请求行,请求头和请求正文
$request_time #请求花费的时间,单位为秒,精度是毫秒
#日志格式(log_format main)(空格有点乱)
#http层定义日志
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;
1.log_format
2.nginx默认日志格式语法
3.Nginx日志格式允许包含的内置变量
4.access_log日志配置语法
5.Nginx Access日志配置实践
[root@web01 ~]# tailf /var/log/nginx/access.log 默认全局日志(自动生成相关目录和文件)
10.0.0.1 - - [16/May/2020:04:20:46 +0800] "GET / HTTP/1.1" 200 192 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" "-"
记录的源客户端IP地址-------长!!!
变量调用不了,就显示 -
为同一台主机上的不同 nginx网站配置局部日志
1.#配置全局日志
[root@web01 ~]# vim /etc/nginx/nginx.conf
#配置局部日志,不配置局部日志的话,该网站的日志就放到了全局日志
[root@web01 ~]# vim /etc/nginx/conf.d/syy1.conf
server {
listen 80;
server_name game.syy.com;
root /code/game;
index index.html
access_log /var/log/nginx/access.log main;
#配置局部日志,精确到location(location的作用就是自定义浏览器访问路径)
(按访问路径可以 关掉 某一个网站的location局部日志或做 某一个网站的location局部日志),这样只有location的日志被做成局部日志,别的日志全部放到了全局日志
#作用:自定义.ico的访问指向,便于网站pv的统计(因为有时候访问一次会有两条日志)
[root@web01 ~]# vim /etc/nginx/conf.d/syy1.conf
location / {
root /code;
index index.html
}
location /favicon.ico {
access_log off;
}
[root@web01 ~]# vim /etc/nginx/conf.d/syy1.conf
#relode之后自动生成局部日志sbqm_access.log,不会生成sbqm_error.log(名字可以自定义)
location / {
root /code;
index index.html
}
location /favicon.ico {
access_log /var/log/nginx/sbqm_access.log main;
}
[root@web01 ~]# vim /etc/nginx/conf.d/syy1.conf 使用相对路径设置局部日志(放到站点目录下)
#wget源码安装的话全局日志默认使用的是相对路径,yum安装的话默认使用的是绝对路径
#所以说wget源码安装的话要修改全局和局部的日志的 配置文件中的日志指向,指向/var/log/nginx
location / {
root /code;
index index.html
}
location /favicon.ico {
access_log log/www.syy1.com_access.log main; #自定义日志名
}
nginx -s relode 之后,显示 /etc/nginx/log/www.syy1.com_access.log 不存在,系统自动补全为绝对路径,如果非要使用相对路径来自定义局部变量的话,那么就 mkdir /etc/nginx/log ,
使用相对路径的方法自定义局部日志,一般只有wget源码nginx才会用(少些2单词???)
日志切割
使用logrotate切割日志(切割某一个目录下的,所有以 .log结尾的文件)
[root@web01 ~]# ll /var/log/nginx/ #查看nginx访问和报错,全局和局部,延迟压缩前和压缩后的所有日志
total 32
-rw-r----- 1 nginx adm 11645 May 16 07:14 access.log #全局访问日志
-rw-r--r-- 1 root root 464 May 15 03:20 access.log-20200515.gz #创建,粘贴,压缩
-rw-r----- 1 nginx adm 1149 May 16 00:43 access.log-20200516
-rw-r----- 1 nginx adm 2630 May 16 07:14 error.log #全局报错日志
-rw-r--r-- 1 root root 394 May 15 02:08 error.log-20200515.gz
-rw-r----- 1 nginx adm 2042 May 16 00:43 error.log-20200516 #自动延迟压缩一个小时左右
[root@web01 ~]# rpm -q logrotate
logrotate-3.8.6-17.el7.x86_64
[root@web01 ~]# rpm -ql logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf #logrotate主配置文件
/etc/logrotate.d #里面指定了要切割哪些软件和方法(子配置文件)
/etc/rwtab.d/logrotate
/usr/sbin/logrotate
[root@web01 ~]# cat /etc/logrotate.conf logrotate的主配置文件
# see "man logrotate" for details
# rotate log files weekly(默认按周切割)
weekly
# keep 4 weeks worth of backlogs (保留多少/月/周/天)
rotate 4
# create new (empty) log files after rotating old ones (切割后自动创建一个新文件,前缀在nginx主配置文件或者从配置文件中指定)
create
# use date as a suffix of the rotated file (生成的新文件自动添加日期后缀)前缀?
dateext
# uncomment this if you want your log files compressed (取消的话就是压缩切割的日志)
#compress
# RPM packages drop log rotation information into this directory (日志轮询信息)
include /etc/logrotate.d
# no packages own wtmp and btmp -- we'll rotate them here (切割某些特殊日志)
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
--------------------------------------------------------------------------
[root@web01 ~]# vim /etc/logrotate.d/nginx logrotate子配置文件
/var/log/nginx/*.log {
#(复制粘贴的时候要修改),指定了logrotate只切割/var/log/nginx/下 所有以.log结尾的文件,所以说,源码编译安装的时候日志的的位置要指定在这里(/var/log/nginx/)
daily
#按天切割日志(时分秒会有偏差)
missingok
#忽略丢失
rotate 52
#只保留(52个/天/周/年 的备份)(不用自己使用cron删除了)
compress
#日志文件进行压缩(非空)(使用gzip)(gzip压缩后自动删除源文件)
delaycompress
#延迟压缩,减少系统负载,#自动延迟压缩一个小时左右(可以注释,方便查看)
notifempty
#忽略空日志(所以日志的显示有的时候会少几天的)
create 640 nginx adm
#创建日志的权限,属主,属组。(复制粘贴的时候要修改)(nginx,adm都是系统自动创建的用户,所以说,不用创建用户了,可以直接授权)
sharedscripts
#指定某一个脚本文件(具体想怎么切?)
postrotate
#指定切割的命令。(复制粘贴的时候要修改)
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
#脚本结束
}
[root@web01 ~]# kill -l
10) SIGUSR1
kill -USR1 不影响进程,重新加载配置文件
[root@web01 ~]# cat /var/run/nginx.pid
840
[root@web01 ~]# ps -ef|grep nginx
root 840 1 0 00:59 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
报错
[root@web01 ~]# nginx -t
nginx: [emerg] "location" directive is not allowed here in /etc/nginx/conf.d/syy1.conf:7
nginx: configuration file /etc/nginx/nginx.conf test failed
解决方法:把location放到server语句里面