运维之道 | Nginx 配置文件优化解析
Nginx配置文件nginx.conf
1、配置文件位置/usr/local/nginx/conf/nginx.conf
2、nginx 的组成部分
配置文件中有很多#,开头的表示注释内容,我们去掉所有以 # 开头的段落,精简之后的内容如下:
worker_processes 1;events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
}
Nginx 配置文件有三部分组成:全局块、events块、http块
- 第一部分:全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)
、允许生成的 worker process 数
,进程 PID 存放路径
、日志存放路径和类型
以及配置文件的引入
等。
比如上面第一行配置的:
#user nobody;
worker_processes 1;#pid logs/nginx.pid;pid /usr/local/nginx/logs/nginx.pid;#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多
,但是会受到硬件、软件等设备的制约。
- 第二部分:events块
events 块涉及的指令主要影响Nginx 服务器与用户的网络连接
,常用的设置包括是否开启对多work process 下的网络连接进行序列化
,是否允许同时接收多个网络连接
,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024.
这部分的配置对 Nginx 的性能
影响较大,在实际中应该灵活配置。
events {worker_connections 1024;
}
- 第三部分:http块
http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
}
这算是 Nginx 服务器配置中最频繁的部分,代理
、缓存
和日志定义
等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http全局块、server 块:
http全局块
http全局块配置的指令包括文件引入
、MIME-TYPE 定义
、日志自定义
、连接超时时间
、单链接请求数上限
等。server 块
server块和虚拟主机有密切关系
,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。全局 server 块
最常见的配置是本虚拟机主机的监听配置
和本虚拟主机的名称或IP配置
。location 块
一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串
(例如 server_name/uri-string),对虚拟主机名称
(也可以是IP 别名)之外的字符串
(例如 前面的 /uri-string)进行匹配
,对特定的请求进行处理。 地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
Nginx 主要配置文件优化
`#定义 Nginx 运行的用户和用户组`
user www www;
`#启动进程,通常设置成和 CPU 的数量相等`
worker _processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
`#为每个进程分配 CPU,上例中将 8 个进程分配到 8 个 CPU,当然可以写多个,或者将一个进程分配到多个CPU`
worker_rlimit_nofile 102400;
`#该指令是当一个 Nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit-n)与 Nginx 进程数相除,但是 Nginx分配请求并不是那么均匀,所以最好与 ulimit-n的值保持一致`
`#全局错误日志及 PID 文件`
error_log /usr/local/nginx/logs/error.log;
`#错误日志定义等级:[ debug 、info 、notice 、warn 、error 、crit ]`
pid /usr/local/nginx/nginx.pid;
`#工作模式及连接数上限`
//
events {
use epoll;
`# epoll 是多路复用I/O(I/O multiplexing)中的一种方式,但是仅用于 Linux 2.6 以上内核,可以大大提高 Nginx 的性能`
worker_connections 102400;
`#单个后台 worker process 进程的最大并发连接数(最大连接数=连接数 * 进程数)`
multi_accept on;
`#尽可能多地接受请求`
}
//
`#设定 HTTP 服务器,利用它的反向代理功能提供负载均衡支持`
http {
`#设定 MI阻类型,类型由 mime.type 文件定义`
include mime.types;
default_type application/octet-stream;
`#设定日志格式`
access_log /usr/local/nginx/log/nginx/access.log;
`#sendfile 指令指定 Nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用必须设为 on`
sendfile on;
`#如果用来进行下载等应用磁盘 I/O 重负载应用,可设置为 off,以平衡磁盘与网络 I/O 处理速度,降低系统的 uptime `
# autoindex on;
`#开启目录列表访问,合适下载服务器,默认关闭`
tcp_nopush on;
`#防止网络阻塞`
keepalive_timeout 60;
`#keepalive 超时时间,客户端到服务器端的连接持续有效时间,当出现对服务器的后继请求时,keepalive-timeout 功能可避免建立或重新建立连接`
tcp_nodelay on;
`#提高数据的实时响应性`
`#开启 gzip 压缩`
gzip on;
gzip_min_length lKB;
gzip_buffers 4 16KB;
gzip_http_ version 1.1;
gzip_comp_level 2;
`#压缩级别大小,最大为 9,值越小,压缩后比例越小, CPU 处理更快,值越大,消耗 CPU 比较高`
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_ vary on;
client_max_body_size 1OMB;
`#允许客户端请求的最大单文件字节数`
client_body_buffer_size 128KB;
`#缓冲区代理缓冲用户端请求的最大字节数`
proxy_connect_timeout 90;
`# Nginx 跟后端服务器连接超时时间(代理连接超时) `
proxy_send_ timeout 90;
`#后端服务器数据回传时间(代理发送超时)`
proxy_read_timeout 90;
`#连接成功后,后端服务器响应时间(代理接收超时)`
proxy_buffer_size 4KB;
`#设置代理服务器(Nginx)保存用户头信息的缓冲区大小 `
proxy_buffers 4 32KB;
`#proxy_ buffers `
`#缓冲区,网页平均在 32KB 以下的话,这样设置`
proxy_busy_buffers_size 64KB;
`#高负荷下缓冲大小( proxy_buffers * 2) `
`#设定请求缓冲`
large_client_header_buffers 4 4KB;
`#客户端请求头部的缓冲区大小,这个可以根据系统分页大小来设置,一般一个请求的头部大小不会超过 lKB`
client header buffer size 4KB;
`#不过由于一般系统分页都要大于1kb,所以这里设置为分页大小。分页大小可以用命令 getconf PAGESIZE 取得`
`# 这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致。`
open_file_cache max= 102400 inactive= 20s;
`# inactive 是指经过多长时间文件没被请求后删除缓存`
open_file_cache_valid 30s;
`# 这个是指多长时间检查一次缓存的有效信息`
open_file_cache_min_uses 1;
`# open_file_cache 指令中的 inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在 inactive 包含其他配置文件,如自定义的虚拟主机`
include vhosts.conf;
Nginx 动静均衡配置优化
Nginx Web 默认发布静态页面,也可以均衡后端动态页面。
用户发起 HTTP 请求,如果请求为静态页面,Nginx 直接处理井返回,如果请求的是动态页面,Nginx 收到请求之后会进行判断,转到后端服务器去处理。
Nginx 实现负载均衡需要基于 upstream 模块,同时需要设置 location proxy _pass 转发 指令实现。以下为 Ningx 应用负载均衡集群配置,根据后端实际情况修改即可 jfedu_ www 为负载均衡模块的名称,可以任意指定,但必须跟 vhosts. conf、 nginx. conf 虚拟主机的 proxy_ pass 段保持一致,否则不能将请求转发至后端的服务器,weight 表示配置权重,在 fail_ timeout 内检查 max_fails 次数,失败则剔除均衡。代码如下 :
upstream jfedu_www {
server 127.0.0.1:8080 weight=1 max_fails = 2 fail_timeout = 30s;
server 127.0.0.1:8081 weight=1 max_fails = 2 fail_timeout = 30s;
}
# 虚拟主机配置
server { `#侦听 80 端口` listen 80; `#定义使用 www.villian.net 访问` server_name www.villian.net; `#设定本虚拟主机的访问日志` access_log logs/access.log main; `#定义服务器的默认网站根目录位置` root /data/webapps/www; `#定义首页索引文件的名称 `index index.php index.html index.htm; `#默认请求` location ~ /{ `#定义服务器的默认网站根目录位置` root /data/webapps/www; `#定义首页索引文件的名称 `index index.php index.html index.htm; `#以下是一些反向代理的配置` proxy_next_upstream http_502 http_504 error timeout invalid_header; `#如果后端的服务器返回 502、504、执行超时等错误,自动将请求转发到 upstream 负载均衡池中的另一台服务器,实现故障转移` proxy_ redirect off;`#后端的回eb 服务器可以通过 X - Forwarded - For 获取用户真实 IP `proxy_set_header Host $host; proxy_ set_ header X-Real - IP $remote_ addr;proxy_set_header X-Forwarded- For $proxy_add_x_forwarded_for; proxy_pass http://villian_www;`#请求转向后端定义的均衡模块`}`#定义错误提示页面` error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }`#配置 Nginx 动静分离,定义的静态页面直接从 Nginx 发布目录读取` location ~.*\. (html | html gif | jpg jpeg | bmp | png | ico | txt | js | css)$ {root /data/webapps/www; `#expires 定义用户浏览器缓存的时间为 3 天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力,在浏览器保存该类型文件的天数 `expires 3d; }`#PHP 脚本请求全部转发到 FastCGI 处理.使用 FastCGI 默认配置` location ~\. php ${ root /root; FastCGI_pass 127.0.0.1:9000; FastCGI_index index. php; FastCGI_param SCRIPT_FILENAME /data/webapps/www $FastCGI_script_name; include FastCGI_params; }`#设定查看 Nginx 状态的地址 `location /NginxStatus{ stub_status on; }}
}
- 通过 expires 参数设置,可以在浏览器缓存静态文件,从而减少用户与服务器之间的请求和流量。 具体 expires 定义是给一个资源设定一个过期时间,浏览器无须去服务端下载资 源,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。
- 如果静态文件不常更新, expires 可以设置为 30d,表示在这 30 天之内再次访问该静态 文件,浏览器会发送一个 HTTP 请求,会比对服务器该文件最后更新时间是否有变化,如果 没有变化,则不会从服务器抓取,返回 HTTP 状态码 304 ,如果有修改,则直接从服务器重 新下载,返回 HTTP 状态码 200。
Nginx 虚拟主机配置优化实战
- 在真实的企业服务器环境中,为了充分利用服务器的资源,单台 Nginx Web 服务器同时会配置 N 个网站,也可称之为配置 N 个虚拟域名的主机,即多个域名对应同一个 80 端口。
- 在 Nginx. conf 中加入 server 代码, Nginx 虚拟主机配置代码如下:
1、修改配置文件
worker_processes 1;
events { worker_connections 1024;
}
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65;
#//virtual hosts config
server { listen 80; server_name www.zwl1.com; access_log logs/zwl1.access.log; location /{root html/jfl; index index.html index.htm; }
}server { listen 80; server_name www.zwl2.com; access log logs/zwl2.access.log; location /{ root html/zwl2; index index.html index.htm; }}}
2、配置hosts端口
[root@localhost nginx]# vi /etc/hosts ///加入下列两行内容192.168.146.129 www.zwl1.com
192.168.146.129 www.zwl2.com
3、创建发布目录、web界面
[root@localhost ~]# mkdir -p / usr/ local/nginx/ html/ {zwl1,zwl2}
[root@localhost html]# ls
50x.html index.html zwl1 zwl2
[root@localhost zwl1]# cat index.html ///zwl1 web的内容、同理zwl2<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to zwl1</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
4、检查配置是否成功,并重启nginx
[root@localhost nginx]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful[root@localhost nginx]# /usr/local/nginx/sbin/nginx
5、访问 www.zwl1.com
、www.zwl2.com
网页验证搭建是否成功
摘取至:《曝光:Linux企业运维实战》书籍
运维之道 | Nginx 配置文件优化解析相关推荐
- 运维之道 | Nginx rewrite 规则详解
Nginx rewrite 规则详解 一.rewrite规则概念 rewirte 规则也称为规则重写,主要功能是实现浏览器访问 HTTP URL 的跳转,其正则表达式是基于 Perl 语言.通常而言, ...
- 运维之道 | Nginx调优
Nginx调优 文章目录 Nginx调优 一.隐藏 Nginx 版本号 二.隐藏 Nginx 版本号和软件名 三.更改 Nginx 服务的默认用户 四.优化 Nginx worker 进程数 五.绑定 ...
- 运维之道 | Nginx负载均衡、反向代理
Nginx负载均衡.反向代理 一.代理服务器 1.什么是代理服务器? 客户端访问数据的时候,不会直接与目标服务器进行连接,而是所有的请求都发送到代理(Proxy)服务器,然后代理服务器会去根据你的请求 ...
- python 配置文件对比_Python运维自动化之nginx配置文件对比操作示例
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- python自动化部署nginx_扣丁学堂Python开发运维自动化之nginx配置文件对比操作
扣丁学堂Python开发运维自动化之nginx配置文件对比操作 2018-08-30 09:51:29 646浏览 今天扣丁学堂Python培训老师给大家介绍一下关于Python运维自动化之nginx ...
- 运维实践-最新Nginx二进制构建编译lua-nginx-module动态链接Lua脚本访问Redis数据库读取静态资源隐式展现...
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x0n 前言简述 知识引入 Lua模块指令阶段 0x01 部署环境 安装说明 安 ...
- 从扁鹊医术看华为数据中心智能化运维之道
根据典记,魏文王曾求教于名医扁鹊:"你们家兄弟三人,都精于医术,谁医术最好呢?"扁鹊:"大哥最好,二哥差些,我是三人中最差的一个."文王又问:"那为什 ...
- 运维之DNS服务器Bind9配置解析和基础示例及附带命令
0x03 Bind 配置解析 实例1.DNS主从区域传输介绍与配置 实例2.DNS区域传输限制 实例3.DNS部分二级域名解析 示例1.采用Bind建立一个A记录DNS服务器 示例2.采用Bind建立 ...
- 运维之道 | 基于 LAMP 环境部署 Discuz 论坛
基于 LAMP 环境部署 Discuz 论坛 LAMP环境部署 一.基于VMware虚拟机部署Centos系统 [root@localhost ~]# cat /etc/redhat-release ...
最新文章
- 【采用】概率图模型在反欺诈的应用(无监督机器学习)
- 自动去除所有目录的隐藏属性的DOS命令
- OpenCV+yolov2-tiny实现目标检测(C++)
- 方法级别权限控制-基本介绍与JSR250注解使用
- Asp.Net 中Report Service (RDLC)动态绑定数据-学习笔记
- Redis 集合处理
- Bailian2811 熄灯问题【暴力】
- 斗鱼TV Web API
- arduino连接ps2手柄控制智能小车实践记录
- 吐槽表情包计算机系,网友用表情包形容自己的专业 分明是场吐槽大会
- VSCode小说神器Thief-Book-VSCode页数获取
- 基于lio-sam框架,教你如何进行回环检测及位姿计算
- idea gwt 怎么编译_带Spring Boot的GWT
- Android GMS (谷歌移动服务)
- Mysql引擎之MyISAM引擎
- 揭秘人性化社区背后的黑科技:WeWork旗舰店入驻北京坊
- 基于数据挖掘的H公园客流量分析预测
- 英语文章关于计算机的,关于计算机的英语范文5篇
- “DatePicker.RangePicker”不能用作 JSX 组件
- Chrome浏览器如何设置打开时显示上次未关闭的网页
热门文章
- 51单片机proteus仿真 按键控制数码管数字显示
- 荒野行动pc版卡在获取服务器信息,《荒野行动》PC版更新卡在获取引擎信息 更新引擎卡住等解决方法...
- 运行程序时提示找不到zlib1.dll,无法继续执行代码的解决方法
- 【资源分享】Go并发编程实战(第2版)郝林 著 PDF 下载
- Dell电脑内存条安装注意事项
- 这个 72k Star 的 GitHub 项目被封了
- 编服图涵生NCI.SNAP.v2.571 1CD+MaxSEA
- 简单易操作的将m3u8转成mp4
- 公岸网:公共基础知识必背内容
- HC-05蓝牙串口模块的使用说明