Nginx全配置

#==========================nginx全局配置==========================#
# 指定 nginx 进程运行的用户,这里是 nginx,默认为nobody。
user nginx;  

# 指定 nginx 使用多少个 worker 进程处理请求,这里使用了 auto,表示根据 CPU 核心数自动分配。
worker_processes auto;  

# 指定 nginx 主进程的 PID 文件路径。
pid /run/nginx.pid;  

#指定错误日志文件的路径
error_log /var/log/nginx/error.log;  
#==========================nginx全局配置==========================#

##==========================events==========================##
# 事件模块的配置
events {
    # 默认值512,设置每个 worker 进程的最大连接数。
    worker_connections  1024;    
    
    # 默认值off,控制是否在一次事件循环中accept多个连接请求。启用 multi_accept 可以减少 CPU 的使用和系统调用的次数,也可能会导致每个请求的响应时间增加
    multi_accept on; 
    
    # 使用连接互斥锁进行顺序的accept()系统调用,防止惊群现象发生,默认为on
    accept_mutex on;   
    
    # 如果一个进程没有互斥锁,它将延迟至少多长时间。默认情况下,延迟是500ms 
    accept_mutex_delay 500ms
    
    # 指定事件驱动模块,默认值select,这个驱动模块在大量连接时,性能较差,这里使用了 epoll。 可选select|poll|kqueue|epoll|resig|/dev/poll|eventport
    use epoll;      
    
    # 设置 accept 互斥锁等待时间。
    accept_mutex_delay 500ms; 

    # 实验模块,仅在 FreeBSD 下可用,aio 启用则使用异步I/O,不启用则使用同步I/O,默认不启用
    aio threads; # 指定异步 I/O 模块,这里使用了 threads。
    aio_write on; # 启用异步写入操作。
    aio_read on; # 启用异步读取操作。

    # 事件驱动模块 use epoll时配置
    epoll_events 1024; # 默认值为 512,即每次事件循环最多处理 512 个事件。
    epoll_event_connections 512; # 默认值为 2048,即每个事件最多处理 2048 个连接。
    epoll_timeout 1s; # 默认值为 0,即 epoll 模块不会超时,等待事件的时间取决于操作系统。

    //事件驱动模块 use kqueue时配置,仅在 FreeBSD 下可用
    kqueue_events 1024;
    kqueue_event_connections 512;
    kqueue_timeout 1s;
}
##==========================events==========================##

##==========================http==========================##
# 主要用于处理 HTTP 请求和响应,包括路由、反向代理、缓存、日志等功能。
http {
    # 导入 MIME 类型的配置文件。
    include  /etc/nginx/mime.types;   
    
    # 定义默认的 MIME 类型,默认为text/plain 
    default_type  application/octet-stream; 
    
    # 定义访问日志格式 main
    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  /var/log/nginx/access.log main; 
    
    # 指定错误日志文件的路径和格式。
    error_log  /var/log/nginx/error.log main;   
    
    # 默认开启,直接把文件内容从磁盘读入内核缓冲区,尤其是在处理大文件时,效果更为明显。
    sendfile on;  
    
    # 每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    sendfile_max_chunk 100k;  
    
    # 客户端与服务器之间的连接超时时间,默认值为 75s。
    keepalive_timeout 75;  
    
    # 在一个持久连接上最多允许的请求数量,默认值为 100。
    keepalive_requests 100; 
    
    # 是否开启 Gzip 压缩,默认值为 off。
    gzip on; 
    gzip_types text/plain text/css application/json application/javascript application/xml; # 压缩文件类型列表
    gzip_min_length 20; # 只压缩大于该长度的文件,单位为字节,默认值为 20。
    gzip_buffers 4 8k; # 第一个参数表示缓冲区的数量,第二个参数表示每个缓冲区的大小。 默认值为 4 8k。
    
    # 当服务器返回错误码时,可以显示指定的错误页面。
    error_page error_page 404 /404.html;  
    
    ###==========================upstream=========================###
    # upstream 模块用于配置反向代理服务器组,可以将客户端请求转发到多台服务器进行处理,从而实现负载均衡和高可用性。
    upstream backend  {   
      # 简单的循环负载均衡
      server backend1.example.com;
      server backend2.example.com;

      # 使用权重进行负载平衡
      server backend3.example.com weight=3; #指定服务器的权重,缺省为 1,可以是任意正整数。
      server backend4.example.com weight=2;

      # 使用IP Hash值进行权重进行负载平衡,确保来自同一 IP 的请求总是发送到同一服务器。
      ip_hash;

      # 用最少的连接进行负载均衡,动态地将请求发送到最空闲的服务器。
      least_conn;

      # 使用服务器响应时间进行负载平衡,将请求发送到响应时间最短的服务器。
      fair;

      # 根据请求 URL 的哈希值进行负载平衡
      hash $remote_addr consistent;

      # 随机发送到服务器
      random;

      # 为backend分配一个共享内存区域。
      zone backend_zone 64k;

      # 指定与后端服务器的 TCP 连接复用数,缺省为 1。
      keepalive 16; 

      # 指定与后端服务器的 TCP 连接最大请求数,超过此数量,连接将关闭并重新建立新连接。默认为 100。
      keepalive_requests 100;

      # 指定与后端服务器的 TCP 连接空闲超时时间,默认为 75 秒。
      keepalive_timeout 60s;
    }
    ###==========================upstream=========================###
    
    ###==========================server=========================###
    server {
      # 监听端口
      listen 80;

      # 指定服务器的主机名。它可以是域名、IP 地址或*匹配任何主机名,也可以配置多个域名
      server_name example.com;

      # 根目录
      root /var/www/example.com;
      
      # 限速 每秒4K
      set $limit_rate 4k;

      # 当用户访问example.com 或 example.com/ 时
      location / {

      # 指定用于提供文件的回退机制。如果请求的文件不存在,nginx将尝试返回fallback
        try_files index.html index.htm @fallback;
      }
      # 上面try files 回退到这里
      location @fallback {
         root  /var/www/error;
         index index.html;
      }

      

      # 当用户访问example.com/api时
      location /api {

        # 反向代理到 http://backend/api; 本配置中 backend 是个负载均衡器
        proxy_pass http://backend/api;
      }

      # 当用户访问example.com/images时
      location /images/ {
        # alias 看起来类似于 root 指令,但文档根目录没有改变,只是用于当前请求的路径。 
        # /images/top.gif 将返回 /var/www/images/top.gif
        alias /var/www/images/;

        # 设置缓存时间为1天,原理是Header 设置Cache-Control
        expires 1d;

        # 添加header
        add_header Cache-Control "public";
      }

      location ~ \.php$ {
        include fastcgi_params;  
        fastcgi_index index.php;  
        # 使用fastcgi协议 转发到 phpfpm的unix socket文件 phpfpm 和 nginx 同一台机器才可以这么配置
        fastcgi_pass unix:/var/run/php/php7.x-fpm.sock;
        # 使用fastcgi协议 转发到某个服务器某个端口
        fastcgi_pass 127.0.0.1:9000;  
        # 使用fastcgi协议 转发到负载均衡器
        fastcgi_pass http://backend/

        deny 127.0.0.1;  #拒绝的ip
        allow 172.18.5.54; #允许的ip           
      }

      # SSL 配置 监听443
      listen 443 ssl;

      # 证书路径
      ssl_certificate /etc/ssl/certs/example.com.crt;

      # 证书私钥
      ssl_certificate_key /etc/ssl/private/example.com.key;

      # HTTP/2 配置 监听443
      listen 443 ssl http2;

      # 设置安全header
      add_header X-Content-Type-Options "nosniff" always;
      add_header X-Frame-Options "SAMEORIGIN" always;
      add_header X-XSS-Protection "1; mode=block" always;
    }

    ###==========================server=========================###
}
##==========================http==========================##

@@todo rewrite 模块

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容