主配置文件
Nginx.conf
/etc/nginx/nginx.conf
Nginx 主配置文件整体分为三块,分别是
CoreModule(核心模块)
EventModule(事件驱动模块)
HttpCoreModule(http 内核模块)
第一部分:配置文件主区域配置
user nginx; #定义运行nginx进程的用户
worker_processes 1; #Nginx运行的work进程数量(建议与CPU数量一致或 auto)
error_log /var/log/nginx/error.log warn; #nginx错误日志
pid /var/run/nginx.pid; #nginx运行pid
第二部分:配置文件事件区域
events {
worker_connections 1024; #每个 worker 进程支持的最大连接数
}
第三部分:配置http区域
http {
include /etc/nginx/mime.types; #Nginx支持的媒体类型库文件
default_type application/octet-stream; #默认的媒体类型
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; #包含子配置文件
}
第四部分:子配置文件内容
egrep -v "#|^$" /etc/nginx/conf.d/default.conf
server {
listen 80; #指定监听端口
server_name localhost; #指定监听的域名
location / {
root /usr/share/nginx/html; #定义站点的目录
index index.html index.htm; #定义首页文件
}
error_page 500 502 503 504 /50x.html; #优雅显示页面信息
location = /50x.html {
root /usr/share/nginx/html;
}
}
虚拟主机
mkdir /usr/share/nginx/html/{test,test_bak}
echo <h1>welcome to test page</h1> /usr/share/nginx/html/test/index.html
echo <h1>welcome to test page</h1> /usr/share/nginx/html/test_bak/index.html
基于域名:
vim /etc/nginx/conf.d/default.conf
server {
listen 81;
server_name www.test.com;
location / {
root /usr/share/nginx/html/test;
index index.html index.htm;
}
}
server {
listen 82;
server_name blog.test_bak.com;
location / {
root /usr/share/nginx/html/test_bak;
index index.html index.htm;
}
}
}
基于IP:
vim /etc/nginx/conf.d/default.conf
server {
listen 172.19.79.193:81;
server_name www.test.com;
location / {
root /usr/share/nginx/html/test;
index index.html index.htm;
}
}
server {
listen 172.19.79.195:82;
server_name www.test_bak.com;
location / {
root /usr/share/nginx/html/test_bak;
index index.html index.htm;
}
}
}
Nginx虚拟主机配置优化
拆分nginx的配置文件为各个子配置,并且每个域名拥有自己独立的访问日志;
cat /etc/nginx/conf.d/test.conf
server {
listen 80;
server_name www.test.com;
access_log /var/log/nginx/test.access.log main;
location / {
root /usr/share/nginx/html/test;
index index.html index.htm;
}
}
cat /etc/nginx/conf.d/test_bak.conf
server {
listen 80;
server_name www.test_bak.com;
access_log /var/log/nginx/test_bak.access.log main;
location / {
root /usr/share/nginx/html/test_bak;
index index.html index.htm;
}
}
配置文件语法检测:
nginx -t
重启nginx
systemctl restart nginx
访问测试:
curl www.test.com
curl www.test_bak.com
nginx日志
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
日志字段解释:
$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_forwarded_for #记录客户端 IP 地址
$request_length # 请求的长度(包括请求行, 请求头和请求正文)。
$request_time # 请求花费的时间,单位为秒,精度毫秒
# 注:如果 Nginx 位于负载均衡器, nginx 反向代理之后, web 服务器无法直接获取到客 户端真实的 IP 地址。
# $remote_addr 获取的是反向代理的 IP 地址。 反向代理服务器在转发请求的 http 头信息中,
# 增加 X-Forwarded-For 信息,用来记录客户端 IP 地址和客户端请求的服务器地址。
Location:
使用 Nginx Location 可以控制访问网站的路径, 但一个 server 可以有多个 location 配置,多个location通过优先级来区分。
location语法介绍:
location [=|^~|~|~*|!~|!~*|/] /uri/ { ...
}
location语法优先级
匹配符 | 匹配规则 | 优先级(高-低) |
---|---|---|
= | 精确匹配 | 1 |
^~ | 以某个字符串开头 | 2 |
~ | 区分大小写的正则匹配 | 3 |
~* | 不区分大小写的正则匹配 | 4 |
!~ | 区分大小写不匹配的正则 | 5 |
!~* | 区分大小写不匹配的正则 | 6 |
/ | 通用匹配,任何请求都会匹配到 | 7 |