nginx的server标签还有日志管理

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不可以包含

[root@web01 ~]# vim /etc/nginx/conf.d/syy1.conf 
alias的作用就是当浏览器访问www.syy1.com/o 的时候,直接显示/code下的内容,不在显示/code/o下的内容(少了一层目录)	设置了alias和root只能设置一个,都设置会报错
server {
        listen 80;
        server_name www.syy1.com;
        location / {
                root /code/syy1;
                index index.html;
        }

        location /o {
        alias /code;
        autoindex on;
        }
}  

相要autoindex模块生效,那么站点目录下面不能有index.html或者index.htm

[root@web01 ~]# vim /etc/nginx/conf.d/syy1.conf 
server {
        listen 80;
        server_name www.syy1.com;
        location / {
                root /code/syy1;
                index index.html;
        }

        location /o {
        alias /code;
        #index index.html;
        }
}
autoindex和index必须要指定一个,一个都不指定的话就报错(403),nginx默认无论如何都先找index模块
如果只设置一个autoindex的话,相要autoindex模块生效,那么站点目录下面不能有index.html或者index.htm
只要站点目录下有index.html或者index.htm,那么就显示html页面

[root@web01 ~]# vim /etc/nginx/conf.d/syy1.conf 
server {
        listen 80;
        server_name www.syy1.com;
        location / {
                root code/syy1;
                index index.html;
        }
使用相对路径做站点目录,站点目录的绝对路径是 /usr/share/nginx/code/syy1 下


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语句里面
posted @ 2020-05-16 13:19  看萝卜在飘  阅读(603)  评论(0编辑  收藏  举报