nginx主配置文件nginx.conf
nginx配置文件主要分为以下几块:
- 全局块:全局配置,对全局生效
- events块:配置影响 Nginx 服务器与用户的网络连接
- http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
- server块:配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块
- location块:用于配置匹配的 uri
- upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分
用vim编辑器进入nginx配置文件
1.全局配置
#user nobody; #运行用户,若编译时未指定则默认为 nobody
worker_processes auto; #工作进程数量,一般设置为和 CPU 核数一样;设置为auto,nginx将会自己获取这个数值
#error_log logs/error.log; #错误日志文件的位置
#pid logs/nginx.pid; #PID 文件的位置
worker_rlimit_nofile 60000; #设置所有worker进程最大可以打开的文件数,默认为1024
2.I/O 事件配置
events {
use epoll; #使用 epoll I/O模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能
worker_connections 60000; #每个进程处理 60000 个连接
multi_accept on; #是否一次性将监听到的连接全接收进来,默认为off,关闭时一次接收一条连接
accept_mutex on; #默认为on,开启时表示以串行方式接入新连接,否则将通报给所有worker。这可能会浪费资源并产生不可预计的后果,例如惊群问题
}
还需设置系统级别打开文件数限制
ulimit -a #显示当前 shell 进程的资源限制信息,包括硬限制和软限制
ulimit -n 65535 #设置为最大值(临时设置)
vim /etc/security/limits.cof #永久设置方式。加入以下两条参数,设置后重启
* soft nofile 65535
* hard nofile 65535
# *代表任意用户 soft软 hard硬限制
设置完成后可以看到我这里有四个worker进程,刚好和cpu数量一致
验证nginx打开文件的最大限制
ps aux|grep nginx
cat /proc/$(ps aux | awk '/nginx: worker process/ {print $2; exit}')/limits
#/proc 是一个特殊的虚拟文件系统,通常用于 Linux 内核提供的进程信息和系统信息的访问。在 /proc 目录下,每个进程都有一个以其 PID(进程 ID)命名的子目录,其中包含了关于该进程的各种信息。除了进程信息外,/proc 目录还包含了其他系统信息和状态。
http块
http {
##文件扩展名与文件类型映射表
include mime.types;
##默认文件类型
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 logs/access.log main;
##开启文件传输模式
sendfile on;
##只在sendfile on时有效。调用tcp_cork方法,让数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵塞。默认为off。
#tcp_nopush on;
##连接保持超时时间,单位是秒
#keepalive_timeout 0;
keepalive_timeout 65;
##gzip模块设置,设置是否开启gzip压缩输出
#gzip on;
##Web 服务的监听配置
server {
##监听地址及端口
listen 80;
##站点域名,可以有多个,用空格隔开
server_name www.xiaobu.com;
##网页的默认字符集
charset utf-8;
##根目录配置
location / {
##网站根目录的位置/usr/local/nginx/html
root html;
##默认首页文件名
index index.html index.php;
}
##内部错误的反馈页面
error_page 500 502 503 504 /50x.html;
##错误页面配置
location = /50x.html {
root html;
}
}
}
nginx日志格式设定
- $ remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
- $remote_user:用来记录客户端用户名称;
- $time_local: 用来记录访问时间与时区;
- $request: 用来记录请求的url与http协议;
- $status: 用来记录请求状态;成功是200,
- $body_bytes_sent :记录发送给客户端文件主体内容大小;
- $http_referer:用来记录从哪个页面链接访问过来的;
- $http_user_agent:记录客户浏览器的相关信息;
location常见配置指令
- root (根路径配置)
- alias(别名配置)
- proxy_pass (反向代理配置)
location中root和alias指定路径的区别
root指令用于定义文档根目录,在处理客户端请求时,NGINX会在root指定的目录下查找请求的文件。
location /test {
root /var/www;
}
#处理方式: root路径+location路径
http://192.168.50.10/test/abc.html --> /var/www/test/abc.html
alias指令也用于定义文件系统路径,但它与root不同,因为它可以用于在URI中重写部分路径。
location /test {
alias /var/www;
}
#处理方式:alias路径替换location路径
http://192.168.50.10/test/abc.html --> /var/www/abc.html