一、Nginx-配置文件概述
Nginx主要配置文件/etc/nginx/nginx.conf
是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。 Nginx主配置文件整体分为三块进行学习,分别是CoreModule(核心模块)
, EvenMoudule(事件驱动模块)
,HttpCoreModule(Http内核模块)
一般,每个区块以一对花括号{}
来表示开始与结束。
`Coremodule核心模块`
user nginx; #nginx进程运行的用户
worker_processes 1; #nginx工作的进程数量
error_log /var/log/nginx/error.log warn; #nginx的错误日志【警告及其警告以上的都记录】
pid /var/run/nginx.pid; #nginx进程运行后的进程id
`EvenMoudule(事件驱动模块)`
events {
worker_connections 1024; #一个work进程的最大连接数
use epool; #使用epool网络模型
}
`HttpCoreModule(Http内核模块)`
http {
include /etc/nginx/mime.types; #包含资源类型文件
default_type application/octet-stream; #默认以下载方式传输给浏览器(前提是该资源在mime.types中无法找到)
日志格式定义
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; #访问日志
sendfile on;
#tcp_nopush on;
keepalive_timeout 65; #长连接超时时间
#gzip on; #是否开启压缩功能
include /etc/nginx/conf.d/.conf #包含哪个目录下面的conf文件
server { #定义一个网站
listen 80; #监听端口
server_name localhost; #域名
#charset koi8-r; #字符集
location / { #位置
root /usr/share/nginx/html; #代码的主文件位置
index index.html index.htm; #服务端默认返回给用户的文件
}
location /test { #位置
root /code/test/123/; #代码的主文件位置
index index.html index.htm; #服务端默认返回给用户的文件
}
}
`http server location扩展了解项`
http{}层下允许有多个Server{}层,一个Server{}层下又允许有多个Location
http{} 标签主要用来解决用户的请求与响应。
server{} 标签主要用来响应具体的某一个网站。
location{} 标签主要用于匹配网站具体URL路径。
二、Nginx-搭建web网站
#1.编写Nginx配置文件
[root@Server-1 conf.d]# cat game.conf
server {
listen 80;
server_name game.zxc.com;
location / {
root /code;
index index.html;
}
}
2.根据配置文件,创建目录,上传代码
[root@Server-1 conf.d]# mkdir /code
[root@Server-1 conf.d]# cd /code
[root@Server-1 conf.d]# unzip html5.zip
3.重载nginx服务
[root@Server-1 code]# systemctl restart nginx #立即重启
[root@Server-1 code]# systemctl reload nginx #平滑重启
4.配置域名解析(没有DNS情况下)
linux: vim /etc/hosts
192.168.2.4 game.zxc.com
Windows: C:WindowsSystem32driversetchosts
192.168.2.4 game.zxc.com
Mac: sudo vim /etc/hosts
192.168.2.4 game.zxc.com
5.检查解析的是否是192.168.2.4
C:UsersAdministrator>ping game.zxc.com
正在 Ping game.zxc.com [192.168.2.4] 具有 32 字节的数据:
来自 192.168.2.4 的回复: 字节=32 时间=9ms TTL=64
来自 192.168.2.4 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.2.4 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.2.4 的回复: 字节=32 时间<1ms TTL=64
三、Nginx-虚拟主机
问题:
通常在企业中可能会有很多业务系统,那么多套业务服务如何使用Nginx配置?答:
不可能每个业务系统采用一台服务器,都是采用虚拟主机方式来实现一机跑多个业务系统
Nginx配置虚拟主机有如下三种方式:
方式一、基于主机多IP方式
方式二、基于端口的配置方式
方式三、基于多个hosts名称方式(多域名方式)
方式一、基于主机多IP方式
1.配置多网卡多IP的方式
[root@Server-1 conf.d]# cat ip.conf
server {
listen 192.168.2.4:80;
server_name _;
location / {
root /code_ip_eth0;
index index.html;
}
}
server {
listen 10.1.1.1:80;
server_name _;
location / {
root /code_ip_eth1;
index index.html;
}
}
#2.根据配置创建目录
[root@Server-1 conf.d]# mkdir /code_ip_eth0
[root@Server-1 conf.d]# echo "Eth0" > /code_ip_eth0/index.html
[root@Server-1 conf.d]# mkdir /code_ip_eth1
[root@Server-1 conf.d]# echo "Eth1" > /code_ip_eth1/index.html
#3.查看语法是否有问题
[root@Server-1 /]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#4.重启nginx服务
[root@Server-1 conf.d]# systemctl restart nginx
#5.使用curl命令测试
[root@Server-1 ~]# curl 192.168.2.4
Eth1
[root@Server-1 ~]# curl 10.1.1.1
Eth0
2.配置单网卡多IP的方式
#添加一个IP
[root@Server-1 /]# ip addr add 10.1.1.1/24 dev eth0
#测试是否成功
[root@Server-1 /]# ping 10.1.1.1
PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data.
64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=0.548 ms
64 bytes from 10.1.1.1: icmp_seq=2 ttl=64 time=0.036 ms
64 bytes from 10.1.1.1: icmp_seq=3 ttl=64 time=0.100 ms
^C
--- 10.1.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 0.036/0.228/0.548/0.227 ms
[root@Server-1 /]#
#虚拟主机配置方案(也可以把server写在一个一个配置文件内)
[root@Server-1 ~]# cat /etc/nginx/conf.d/ddr1.conf
server {
...
listen 192.168.2.4:80;
...
}
[root@Server-1 ~]# cat /etc/nginx/conf.d/ddr2.conf
server {
...
listen 10.1.1.1:80;
...
}
方式二、基于端口的配置方式
[root@Server-1 conf.d]# vim port.conf
server {
listen 81;
location / {
root /code_81;
index index.html;
}
}
server {
listen 82;
location / {
root /code_82;
index index.html;
}
}
2.根据配置文件创建所需的目录
[root@Server-1 conf.d]# mkdir /code_8{1..2}
[root@Server-1 conf.d]# echo "81" > /code_81/index.html
[root@Server-1 conf.d]# echo "82" > /code_82/index.html
3.检查语法并重启服务
[root@Server-1 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@Server-1 conf.d]# systemctl restart nginx
4.如何去访问
http://192.168.2.4:82/
方式三、基于多个hosts名称方式(多域名方式)
1.准备多虚拟主机配置文件
[root@Server-1 conf.d]# cat test1.zxc.com.conf
server {
listen 80;
server_name test1.zxc.com;
location / {
root /code/test1;
index index.html;
}
}
[root@Server-1 conf.d]# cat test2.zxc.com.conf
server {
listen 80;
server_name test2.zxc.com;
location / {
root /code/test2;
index index.html;
}
}
2.根据配置文件创建对应的目录
[root@Server-1 conf.d]# mkdir /code/test{1..2} -p
[root@Server-1 conf.d]# echo "test1_server" > /code/test1/index.html
[root@Server-1 conf.d]# echo "test2_server" > /code/test2/index.html
[root@Server-1 conf.d]# nginx -t
[root@Server-1 conf.d]# systemctl restart nginx
3.配置域名解析
192.168.2.4 test1.zxc.com
192.168.2.4 test2.zxc.com
4.通过浏览器访问该网站
问题:假如第三步域名解析写成 (192.168.2.4 test3.zxc.com),通过浏览器访问test3.zxc.com会出现什么情况?
答:通过test3.zxc.com 对应的IP:192.168.2.4这台服务器上,发现没有test3.zxc.com 这个域名,就会访问/etc/nginx/conf.d/中最靠前的 .conf配置文件。
四、Nginx-日志管理
1.nginx语法问题
修改完nginx配置文件,一定要自查
1.修改完配置记得使用 nginx -t 检查语法
2.如果没有检查语法,直接重载导致报错。`systemctl status nginx -l 查看错误信息`
2.nginx日志
Nginx有非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志。日志格式通过
log_format命令
来定义格式。
(1)log_format定义日志格式语法
#配置语法:包括 error.log、access.log
Syntax:log_format name [escape=default|json] string ...;
Default:log_format combined "...";
Context:http
(2)Nginx默认定义语法格式
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; #可自定义main方法
访问日志对应以下日志
[root@Server-1 conf.d]# tail -f /var/log/nginx/access.log
192.168.2.1 - - [26/Apr/2022:03:48:05 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" "-"
(3)Nginx日志格式允许包含的内置变量
$remote_addr #记录客户端IP地址
$remote_user #客户端用户名,一般为空
$time_local #记录通用的本地时间,访问时间
$time_iso8601 #记录ISO8601标准格式下的本地时间
$request #记录请求的方法以及请求的http协议
$status #记录请求状态码(用于定位错误信息)
$body_bytes_sent #发送给客户端的资源字节数,不包括响应头的大小
$bytes_sent #发送给客户端的总字节数
$msec #日志写入时间。单位为秒,精度是毫秒。
$http_referer #记录从哪个页面访问过来的
$http_user_agent #记录客户端浏览器相关信息
$http_x_forworded_for #记录客户端IP地址
$request_length #请求的长度(包括请求行,请求头和请求正文)。
$request_time #请求花费的时间,单位为秒,精度毫秒。
#注:如果Nginx位于负载均衡器,nginx反向代理之后,web服务器无法直接获取到客户端真实的IP地址。
# $remote_addr获取的是反向代理的IP地址。反向代理服务器在转发请求的http头信息中
#增加x_forworded_for信息,用来记录客户端IP地址和客户端请求的服务器地址。
###### (4)access_log日志配置语法
Syntax:access.log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access.log off;
Default:access.log logs/access.log combined;
Context:http,server,location,if in location,limit_except
###### (5)Nginx Access日志配置实践
```javascript
#每个server,最好单独都加上access_log
server {
listen 80;
server_name code.oldboy.com;
#将当前的server网站的访问日志记录至对应的目录,使用main格式
access_log /var/log/nginx/code.oldboy.com.log main;
location / {
root /code;
}
#当有人请求改favicon.ico时,不记录日志
location /favicon.ico {
access_log off;
return 200;
}
}
#注:如果在http层配置了access_log,server层没有配置,server日志都在http层配置的access_log中;
如果在http层配置了access_log,server层也配置了,server日志都在server层配置的access_log中;
如果在http层配置了access_log,server层部分配置了,server层配置了就在server层中,反之在http层;
(6)Nginx error日志
/var/log/nginx/error.log
可使用tail -f /var/log/nginx/error.log查看
(7)Nginx日志切割logrotate
[root@Server-1 conf.d]# cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily #每天切割日志
missingok #日志丢失忽略
rotate 52 #日志保留52天
compress #日志文件压缩
delaycompress #延迟压缩文件
notifempty #不切割空文件
create 640 nginx adm #日志文件权限
sharedscripts
postrotate #切割日志执行的命令
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
#注:日志默认就会切割 查看 ll /var/log/nginx/
#注:yum安装默认就有,源码安装要自己写脚本
原文始发于微信公众号(运维库):02-Nginx基础配置+日志
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/64334.html