前言

DMZ(Demilitarized Zone) 非军事区,生产环境 WEB 服务部署的区域,公司的架构为一台nginx 充当 load balance 服务,负载到两台 nginx 上面,反向代理至后台服务,但是nginx 用的全是默认配置加上 proxy_pass 和 upstream,没有进行针对性的优化。

nginx 进程配置

除了可以使用 ulimit 命令对内核参数进行配置,nginx 也支持对自身使用内核资源进行配置。

nginx 默认使用一个 cpu 资源,即开启一个进程处理 web 请求,默认进程打开的最大连接数为 1024,这在生产上面是远远不够的。

配置如下:

#user
user nobody;
#pid file
pid logs/nginx.pid; #--------------------------- 进程---------------------------
#worker进程数,通常设置参考服务器 CPU 数量,auto为自动检测
#worker_process 1;
worker_processes auto;
#进程分配的 cpu
worker_cpu_affinity 000000001 00000010 00000100 00010000 00100000 01000000 10000000;
#worker进程打开最大文件描述符数,最好与 ulimit -u 保持一致
worker_rlimit_nofile 100000;
#全局错误日志
error_log logs/error.log; #events模块中包含nginx中所有处理连接的设置
events {
#worker进程同时打开的最大连接数,理论上每台 nginx 服务器的最大连接数为 worker_process * worker_connections
worker_connections 102400;
#告诉nginx收到一个新链接通知后接受尽可能多的链接
multi_accept on;
#设置用于复用客户端线程的轮训方法,使用 epoll 的 I/O 模型
use epoll;
}

http 域配置

http 模块配置 nginx 处理 http 请求,是 nginx 的核心配置,也是优化 nginx 的关键,大多数 nginx 的功能都是围绕着 http 域来进行的。

http {
#打开或关闭错误页面中的nginx版本号,生产环境中这些是需要关闭的,降低版本号带来的漏洞概率。
server_tokens off;
#server_tag off;
#server_info off;
#优化磁盘IO设置,指定nginx是否调用sendfile函数来输出文件,普通应用设为on,下载等磁盘IO高的应用,可设为off
sendfile on;
#设置nginx在一个数据包里发送所有头文件,而不是一个接一个的发送
tcp_nopush on;
#设置nginx不要缓存数据,而是一段一段的发送,当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值
tcp_nodelay on;     #---------------------------日志---------------------------
#设置nginx是否记录访问日志,关闭这个可以让读取磁盘IO操作更快
access_log on;
#设置nginx只记录严重错误
#error_log logs/error.log crit;
    #定义日志格式,变量的意思另附博客详解,定义的日志格式可在 access_log logs/access.log main 中选取
    log_format main '$remote_addr - $remote_user [$time_local] '
                                 ' "$request" $status $body_bytes_sent '
                                 ' "$http_referer" "$http_user_agent" ';
    log_format porxy '$http_x_forwarded_for - $remote_user [$time_local] '
                                 ' "$request" $status $body_bytes_sent '
                                 ' "$http_referer" "$http_user_agent" '; 
    #设置日志文件缓存(默认是 off),max 设置缓存中最大文件描述符数量,inactive 存活时间,valid 检查频率,min_users 在 inactive 时间内最少使用次数,达到的日志文件描述符记入缓存
    open_log_file_cache max=1000 inactive=20s valid=1m min_users=2;  
    #记录重写日志
    rewrite_log off;             
#给客户端分配keep-alive链接超时时间
keepalive_timeout 30;     #--------------------------- 限流 ---------------------------
    #limit_conn 和 limit_req 可添加到特定 Server 或 location 节点
    #1、控制 session
#设置用户保存各种key的共享内存的参数,5m指的是5兆,$binary_remote_addr 根据远程客户端地址,$server_name 根据服务器名称
limit_conn_zone $binary_remote_addr zone=addr:5m;
#为给定的key设置最大的连接数,这里的key是addr,设定的值是100,根据上面的定义说允许每一个IP地址最多同时打开100个连接,如果共享内存定义的是 $server_name 那么这里是允许服务器最多同时打开100个连接。
limit_conn addr 100;
    #限制流量
    limit_rate 100k;     #2、漏桶方法
    #定义共享内存,与上面的一样,rate 定义请求次数(1 秒 20次)
    limit_req_zone $binary_remote_addr zone=addr:5m rate=20r/s;
    #burst=5 漏桶数为5,即如果第1、2、3、4秒请求为19,那么第5秒25次是可以允许的,nodelay 如果没有则严格使用平均速率限制请求数
    limit_raq zone=addr burst=5 nodelay; #include指在当前文件中包含另一个文件内容,一般 Server 域是放在另一个配置文件中的,主配置文件中包含下即可。
include porxy.types;
#设置文件使用默认的mine-type
default_type text/html;
#设置默认字符集
charset UTF-8;     #-----------------------------gzip 数据-----------------------------
#设置nginx采用gzip压缩的形式发送数据,减少发送数据量,但会增加请求处理时间及CPU处理时间,需要权衡
gzip on;
#加vary给代理服务器使用,针对有的浏览器支持压缩,有个不支持,根据客户端的HTTP头来判断是否需要压缩
gzip_vary on;
#nginx在压缩资源之前,先查找是否有预先gzip处理过的资源
#gzip_static on;
#为指定的客户端禁用gzip功能
gzip_disable "MSIE[1-6]\.";
#允许或禁止压缩基于请求和相应的响应流,any代表压缩所有请求
gzip_proxied any;
#设置对数据启用压缩的最少字节数,如果请求小于10240字节则不压缩,会影响请求速度
gzip_min_length 10240;
#设置数据压缩等级,1-9之间,9最慢压缩比最大
gzip_comp_level 2;
#设置需要压缩的数据格式
gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss;     #-----------------------------cache 文件-----------------------------
#开发缓存的同时也指定了缓存文件的最大数量,20s如果文件没有请求则删除缓存
open_file_cache max=100000 inactive=20s;
#指多长时间检查一次缓存的有效信息
open_file_cache_valid 60s;
#文件缓存最小的访问次数,只有访问超过5次的才会被缓存
open_file_cache_min_uses 5;
#当搜索一个文件时是否缓存错误信息
open_file_cache_errors on; #允许客户端请求的最大单文件字节数
client_max_body_size 8m;
#冲区代理缓冲用户端请求的最大字节数
client_header_buffer_size 32k; #-----------------------------代理-----------------------------
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP,如果不配置那么web服务器只能获取到代理服务器的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;
#nginx跟后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 60;
#连接成功后,后端服务器响应时间(代理接收超时)
proxy_read_timeout 120;
#后端服务器数据回传时间(代理发送超时)
proxy_send_timeout 20;
#设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffer_size 32k;
#proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_buffers 4 128k;
#高负荷下缓冲大小(proxy_buffers*2)
proxy_busy_buffers_size 256k;
#设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_temp_file_write_size 256k;
#1G内存缓冲空间,3天不用删除,最大磁盘缓冲空间2G
proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:1024m inactive=3d max_size=2g;     #-----------------------------负载均衡-----------------------------
#设定负载均衡服务器列表参考博客 nginx 负载均衡配置
upstream myServer{
#后端服务器访问规则
#ip_hash;
server 192.168.0.1:10001 weight=3 max_files=2 file_timeout=30;
        server 192.168.0.2:10002 weight=3 max_conns=10000;
        server 192.168.0.3:10003 weight=4;
        server 192.168.0.4:10004 backup;
}

Server 域配置

虚拟主机配置模块,反向代理或负载均衡挂载的站点。

server {
#虚拟主句监听的端口
listen 80;
#定义访问的域名
server_name www.myserver.com;
#设定本虚拟主机的访问日志,使用 main 格式
access_log logs/myserver.com.access.log main;
    
        #可以在 Server 域中配置限流,具体通过什么方式限流是前面建立共享内存区时定义的,这里只是配置具体限流多少
        limit_raq zone=addr burst=5 nodelay;
        limit_conn addr 100; #默认请求
# 语法规则:location [=|~|~*|^~] /uri/ {...} 先匹配普通location,在匹配正则location
# = 开头表示精确匹配
# ^~ 开头表示uri以某个常规字符串开头,理解为匹配url路径即可,无需考虑编解码
# ~ 开头表示区分大小写的正则匹配
# ~* 开头表示不区分大小写的正则匹配
# !~ 开头表示区分大小写的不匹配的正则
# !~* 开头表示不区分大小写的不匹配的正则
# / 通用匹配,任何请求都会被匹配到
location / {
#定义服务器的默认网站根目录位置
root html;
#定义首页索引文件的名称
index index.html index.htm;
#使用 myServer 负载均衡服务器组
proxy_pass http://myServer;             #当然也可以在 location 域中配置限流
            limit_raq zone=addr burst=5 nodelay;
            limit_conn addr 100;
} #定义错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#静态文件,nginx自己处理
location ~ ^/(images|javascript|js|css|flash|media|static)/{
root /var/www/virtual/htdocs;
#过期时间1天
expires 1d;
#关闭媒体文件日志
access_log off;
log_not_found off;
}
#设定查看Nginx状态的地址
location /NginxStatus {
#!stub_status on; #无此关键字
access_log off;
auth_basic "NginxStatus";
auth_basic_user_file conf/htpasswd;
}
#禁止访问的文件.htxxx
location ~ /\.ht {
deny all;
}
}

简单的配置,nginx 还有很多功能,包括第三方集成的功能,很强大,后续慢慢添加。

nginx 注释配置及详解的更多相关文章

  1. (转)nginx日志配置指令详解

    这篇文章主要介绍了nginx日志配置指令详解,nginx有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志,需要的朋友可以参考下日志对于统计排错来说非常有利的.本文总结了nginx日 ...

  2. nginx日志配置指令详解

    这篇文章主要介绍了nginx日志配置指令详解,nginx有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志,需要的朋友可以参考下日志对于统计排错来说非常有利的.本文总结了nginx日 ...

  3. 【第六课】Nginx常用配置下详解

    目录 Nginx常用配置下详解 1.Nginx虚拟主机 2.部署wordpress开源博客 3.部署discuz开源论坛 4.域名重定向 5.Nginx用户认证 6.Nginx访问日志配置 7.Ngi ...

  4. Nginx主配置参数详解,Nginx配置网站

    1.Niginx主配置文件参数详解 a.上面博客说了在Linux中安装nginx.博文地址为:http://www.cnblogs.com/hanyinglong/p/5102141.html b.当 ...

  5. linux下Nginx配置文件(nginx.conf)配置设置详解(windows用phpstudy集成)

    linux备份nginx.conf文件举例: cp /usr/local/nginx/nginx.conf /usr/local/nginx/nginx.conf-20171111(日期) 在进程列表 ...

  6. nginx主配置参数详解

    ########Nginx的main(全局配置)文件 #指定nginx运行的用户及用户组,默认为nobody #user nobody; #开启的线程数,一般跟逻辑CPU核数一致 worker_pro ...

  7. nginx配置参数详解

    配置参数详解 user nginx nginx ; Nginx用户及组:用户 组.window下不指定 worker_processes 8; 工作进程:数目.根据硬件调整,通常等于CPU数量或者2倍 ...

  8. nginx入门与实战 安装 启动 配置nginx Nginx状态信息(status)配置 正向代理 反向代理 nginx语法之location详解

    nginx入门与实战 网站服务 想必我们大多数人都是通过访问网站而开始接触互联网的吧.我们平时访问的网站服务 就是 Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务. Web ...

  9. nginx的gzip模块详解以及配置

    文章来源 运维公会:nginx的gzip模块详解以及配置   1.gzip模块作用 gzip这个模块无论在测试环境还是生产环境都是必须要开启,这个模块能高效的将页面的内容,无论是html或者css.j ...

随机推荐

  1. 数据库之 MySQL --- 数据处理 之 多行子查询(五)

    ​ [1]需求: 谁的工资比Abel 高?方式一: 第一步线查出Abel共子 第二部进行过滤 SELECT salary FROM employees WHERE last_name = 'Abel' ...

  2. (Java实现) 子集和问题

    回溯算法也叫试探法,它是一种系统地搜索问题的解的方法.回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试.用回溯算法解决问题的一般步骤为: 1.定义一个解空间,它包含问题的解 ...

  3. Java实现 LeetCode 731 我的日程安排表 II(二叉树)

    731. 我的日程安排表 II 实现一个 MyCalendar 类来存放你的日程安排.如果要添加的时间内不会导致三重预订时,则可以存储这个新的日程安排. MyCalendar 有一个 book(int ...

  4. Java实现 LeetCode 97 交错字符串

    97. 交错字符串 给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的. 示例 1: 输入: s1 = "aabcc", s2 = " ...

  5. java实现第二届蓝桥杯地铁换乘(C++)

    地铁换乘. 为解决交通难题,某城市修建了若干条交错的地铁线路,线路名及其所属站名如stations.txt所示. 线1 苹果园 .... 四惠东 线2 西直门 车公庄 .... 建国门 线4 .... ...

  6. Linux目录处理命令cd、pwd、rmdir、cp、mv、rm详解

    命令cd详解 命令cd(英文原意:change directory),命令路径及执行权限为: 可以看到它的路径为/usr/bin/cd,因此,它的执行权限是所有用户 基本功能是切换目录,例如:cd . ...

  7. PAT 换个格式输出整数

    让我们用字母 B 来表示“百”.字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n,换个格式来输出任一个不超过 3 位的正整数.例如 234 应该被输出为BBSSS1234,因为它有 ...

  8. Charles(青花瓷/花瓶)的基本使用

    前言 Charles 其实是一款代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果达到分析抓包的目的.其次该软件是用 Java 写的,能够在 Windows,Mac,Linux 上使用. ...

  9. 「从零单排canal 01」 canal 10分钟入门(基于1.1.4版本)

    1.简介 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据 订阅 和 消费.应该是阿里云DTS(Data Transfer Servi ...

  10. Tomcat线程模型分析及源码解读

    1 四种线程模型  配置方法:在tomcat conf 下找到server.xml,在<Connector port="8080" protocol="HTTP/1 ...