常见参配置实战技巧
下面会讲解实战中应该怎么配置更为合理.
1.user
默认是 nobody, 如果使用 nobody,Nginx 在运行过程中会出现很多操作没有权限, 比如写硬盘. 一般都是用低于 root 级别的用户, 比如 www, 并且可以在 linux 下设置 www 禁止 ssh 登录服务器, 提高安全性;
2.worker_processes
代表 Nginx worker 的进程数, 一般情况下建议和机器的核数相同, 也可以配置 worker_processes auto ; (Nginx1.2.5 版本添加的) 自动根据 cpu 核数进行进程启动;
但是实际应用中, 服务器不一定只跑了 Nginx, 需要考虑机器资源会被分配到哪些服务上, 避免进程启动过多, 和其他服务竞争 cpu, 导致过多上下文切换;
3.worker_cpu_affinity auto
Nginx 1.9.10 添加的功能, 表示可以根据服务器的核数自动配 cpu 亲缘性, 提升 Nginx 的性能;
4,error_log & access_log
关于日志记录的, error_log 配置为 error 级别, 减少不必要的日志记录, 如果是测试环境可以开启 info 级别. 日志记录需要考虑硬盘的独立性, 不要使用 linux 的根分区, 避免大量的 io 影响 Linux 服务器吞吐能力. 单独挂载一个磁盘, 独立使用 io;
另外硬盘的使用寿命需要注意, 关注 message 的日志, 定期检查硬盘 (Nginx 记录日志是异步处理, 并且不会因为硬盘的问题, 导致请求异常, 但是会影响日志的记录) ;
5.worker_priority
配置 Nginx 在 linux 服务器上资源使用的优先级, 作为反向代理服务, 应该拥有极高的优先级, 建议配置到 - 10;
6.gzip_comp_level
压缩等级, 等级最高为 9, 等级越高压缩后的文件越小, 但是消耗的 cpu 也会更多, 经过测试, 压缩等级 7 和 9 的文件大小相比, 其实只有细微的差别, 用 5-7 的等级足矣;
7.upstream 块
配置上游服务器, 可以结合 proxy_next_upstream 等指令做大量的优化, 我会在下面的章节单独说明;
8.error_page
错误重定向, 可以捕获上游服务器错误的状态码后, 将请求重定向到其它地方, 比如提供友好页面, 关于 error_page 的更强大的使用方式.
9.location & root
通过 root 路径可以读取静态文件, 在 1.7.11 以前的版本, Nginx 读取硬盘的文件, 都是阻塞型操作, 后面引入了线程池, 使得读取硬盘提供了非阻塞的操作, 极大的提升了硬盘的 io, 也提升了 proxy_cache 的能力.
Nginx 的常见配置在使用中都有着不同的变化, 那么对于更为复杂的配置来说, 其配置就显得更为精妙了, 所以熟悉 Nginx 的官方 wiki 是发挥它巨大作用的基础.
常见配置注解
- user www www;
- #定义 Nginx 运行的用户和用户组
- worker_processes 2;
- #Nginx 进程数
- worker_cpu_affinity auto;
- #配置 Nginx 进程 cpu 亲源性
- error_log /var/log/error_log info;
- #全局错误日志定义类型 , 默认是 error
- worker_rlimit_nofile 65535;
- #一个 Nginx 进程打开的最多文件描述符数量
- pid /var/run/nginx.pid;
- #进程文件
- worker_priority -10;
- #linnx 系统下的资源使用的优先级
- worker_rlimit_nofile 65535;
- #worker 进程的最大打开文件数限制
- worker_shutdown_timeout 30;
- #30s 内 Nginx 无法平滑退出, 就强行关闭进程
- events {
- worker_connections 10000;
- #单个进程最大连接数 (整个 Nginx 最大连接数 = 连接数 * 进程数)
- use epoll;
- #epoll linux2.6 + 内核高性能的网络 io, 如果跑在 FreeBSD 上面, 就用 kqueue 模型.
- }
- http {
- include conf/mime.types;
- #文件扩展名与文件类型映射表
- default_type application/octet-stream;
- #默认文件类型
- log_format main '$remote_addr - $remote_user [$time_local]'
- '"$request" $status $bytes_sent ''"$http_referer""$http_user_agent" ''"$http_cookie"';
- #定义日志格式
- client_header_buffer_size 1k;
- #设置用户请求头所使用的 buffer 大小
- large_client_header_buffers 4 4k;
- #当默认的缓冲不够用时就会使用此参数.
- server_names_hash_bucket_size 128;
- #服务器名字的 hash 表大小
- client_header_buffer_size 32k;
- #上传文件大小限制
- gzip on;
- #开启 gzip
- gzip _comp_level 6;
- #压缩等级
- gzip _min_length 1100;
- #设置允许压缩的页面最小字节数
- gzip _buffers 4 8k;
- #设置系统获取几个单位的缓存用于存储 gzIP 的压缩结果数据流. 4 8k 代表以 8k 为单位, 按照原始数据大小以 8k 为单位的 4 倍申请内存.
- gzip _types text/plain text/CSS;
- #匹配 MIME 类型进行压缩
- output_buffers 2 32k;
- #设置用于从磁盘读取响应的缓冲区的数量和大小. 此设置为: 按照原始数据大小以 32K 为单位的 2 倍大小申请内存空间.
- sendfile on;
- #启用 sendfile() 函数
- tcp_nopush on;
- #防止网络阻塞, 需要 sendfile 开启
- tcp_nodelay on;
- #防止网络阻塞, 需要 sendfile 开启
- keepalive_timeout 90s;
- #长连接超时时间, 单位是秒
- upstream backend {
- server 192.168.1.12:8081 weight=3;
- server 192.168.1.13:8081 weight=2;
- }
- #upstream 块, weight 是权重, 权重越高, 请求的比例越高.
- server {
- listen 80;
- #http 监听端口
- server_name your.example.com;
- #域名
- access_log /var/log/nginx.access_log main;
- #访问日志记录
- charset koi8-r;
- #默认编码
- location / {
- proxy_pass http://backend ;
- proxy_redirect off;
- proxy_set_header Host $host;
- proxy_set_header X-Real-Ip $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
- #后端的应用服务器通过 X-Forwarded-For 获取用户的真实 IP
- error_page 404 /404.html;
- #对于后端应用服务器抛出的错误 404 进行页面重定向
- location /404.html {
- root /spool/www;
- }
- # 匹配 URL 为 jpg,jpeg,gif 结尾的, 直接去系统文件读取
- location ~* \.(jpg|jpeg|gif)$ {
- root /spool/www;
- expires 30d;
- #浏览器缓存的时间
- }
- }
来源: http://www.bubuko.com/infodetail-2718274.html