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.comwww.zwl2.com网页验证搭建是否成功




摘取至:《曝光:Linux企业运维实战》书籍

运维之道 | Nginx 配置文件优化解析相关推荐

  1. 运维之道 | Nginx rewrite 规则详解

    Nginx rewrite 规则详解 一.rewrite规则概念 rewirte 规则也称为规则重写,主要功能是实现浏览器访问 HTTP URL 的跳转,其正则表达式是基于 Perl 语言.通常而言, ...

  2. 运维之道 | Nginx调优

    Nginx调优 文章目录 Nginx调优 一.隐藏 Nginx 版本号 二.隐藏 Nginx 版本号和软件名 三.更改 Nginx 服务的默认用户 四.优化 Nginx worker 进程数 五.绑定 ...

  3. 运维之道 | Nginx负载均衡、反向代理

    Nginx负载均衡.反向代理 一.代理服务器 1.什么是代理服务器? 客户端访问数据的时候,不会直接与目标服务器进行连接,而是所有的请求都发送到代理(Proxy)服务器,然后代理服务器会去根据你的请求 ...

  4. python 配置文件对比_Python运维自动化之nginx配置文件对比操作示例

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  5. python自动化部署nginx_扣丁学堂Python开发运维自动化之nginx配置文件对比操作

    扣丁学堂Python开发运维自动化之nginx配置文件对比操作 2018-08-30 09:51:29 646浏览 今天扣丁学堂Python培训老师给大家介绍一下关于Python运维自动化之nginx ...

  6. 运维实践-最新Nginx二进制构建编译lua-nginx-module动态链接Lua脚本访问Redis数据库读取静态资源隐式展现...

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x0n 前言简述 知识引入 Lua模块指令阶段 0x01 部署环境 安装说明 安 ...

  7. 从扁鹊医术看华为数据中心智能化运维之道

    根据典记,魏文王曾求教于名医扁鹊:"你们家兄弟三人,都精于医术,谁医术最好呢?"扁鹊:"大哥最好,二哥差些,我是三人中最差的一个."文王又问:"那为什 ...

  8. 运维之DNS服务器Bind9配置解析和基础示例及附带命令

    0x03 Bind 配置解析 实例1.DNS主从区域传输介绍与配置 实例2.DNS区域传输限制 实例3.DNS部分二级域名解析 示例1.采用Bind建立一个A记录DNS服务器 示例2.采用Bind建立 ...

  9. 运维之道 | 基于 LAMP 环境部署 Discuz 论坛

    基于 LAMP 环境部署 Discuz 论坛 LAMP环境部署 一.基于VMware虚拟机部署Centos系统 [root@localhost ~]# cat /etc/redhat-release ...

最新文章

  1. 【采用】概率图模型在反欺诈的应用(无监督机器学习)
  2. 自动去除所有目录的隐藏属性的DOS命令
  3. OpenCV+yolov2-tiny实现目标检测(C++)
  4. 方法级别权限控制-基本介绍与JSR250注解使用
  5. Asp.Net 中Report Service (RDLC)动态绑定数据-学习笔记
  6. Redis 集合处理
  7. Bailian2811 熄灯问题【暴力】
  8. 斗鱼TV Web API
  9. arduino连接ps2手柄控制智能小车实践记录
  10. 吐槽表情包计算机系,网友用表情包形容自己的专业 分明是场吐槽大会
  11. VSCode小说神器Thief-Book-VSCode页数获取
  12. 基于lio-sam框架,教你如何进行回环检测及位姿计算
  13. idea gwt 怎么编译_带Spring Boot的GWT
  14. Android GMS (谷歌移动服务)
  15. Mysql引擎之MyISAM引擎
  16. 揭秘人性化社区背后的黑科技:WeWork旗舰店入驻北京坊
  17. 基于数据挖掘的H公园客流量分析预测
  18. 英语文章关于计算机的,关于计算机的英语范文5篇
  19. “DatePicker.RangePicker”不能用作 JSX 组件
  20. Chrome浏览器如何设置打开时显示上次未关闭的网页

热门文章

  1. 51单片机proteus仿真 按键控制数码管数字显示
  2. 荒野行动pc版卡在获取服务器信息,《荒野行动》PC版更新卡在获取引擎信息 更新引擎卡住等解决方法...
  3. 运行程序时提示找不到zlib1.dll,无法继续执行代码的解决方法
  4. 【资源分享】Go并发编程实战(第2版)郝林 著 PDF 下载
  5. Dell电脑内存条安装注意事项
  6. 这个 72k Star 的 GitHub 项目被封了
  7. 编服图涵生NCI.SNAP.v2.571 1CD+MaxSEA
  8. 简单易操作的将m3u8转成mp4
  9. 公岸网:公共基础知识必背内容
  10. HC-05蓝牙串口模块的使用说明