您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

Nginx配置详解

时间:2021-04-12 10:50:52  来源:今日头条  作者:爱学习的小菜鸟
Nginx配置详解

 

Nginx配置详解

Nginx的配置是在nginx.conf中进行配置的

主要由三部分组成

  • 全局块
  • events块
  • http块

全局块

从配置文件开始到events块之间的内容是全局块,主要用来配置Nginx服务器整体运行的配置指令,主要包括配置运行Nginx的用户组、允许生成的worker process数,进行PID存放路径、日志存放路径和类型以及配置文件的引入

#nginx的用户和用户组
#user  nobody;
# nginx处理并发的数量,值越大,处理并发数量越多
# 通常为cpu数量
worker_processes  1;
#全局错误日志定义 位置 级别([ debug | info | notice | warn | error | crit ])
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#进程文件
#pid        logs/nginx.pid;

#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致.
worker_rlimit_nofile 65535;

events块

主要是影响Nginx服务器与用户网络的连接,常用的配置包括是否开启对多worker process下的网络连接进行序列化,是否允许同时接受多个网络连接,选取那种事件驱动模型来处理连接请求,每个worker process可以同时支持的并发数

events {
#use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
    #epoll模型是linux内核中的高性能网络I/O模型,如果在mac上面,就用kqueue模型。
    use kqueue;
# 每个worker process可以同时支持的连接数为1024
# nginx支持的最大并发数是worker_processes*worker_connections
#如果是作为反向代理服务器的话,最大并发数是worker_processes*worker_connections/2,因为反向代理服务器,每个并发会建立与客户端的连接和与后端的连接,会占用两个连接
    worker_connections  1024;
}

http块

Nginx配置中修改最频繁的配置就是http块的配置

http块又分为了http全局块和server块

http全局块

主要配置的是文件的引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求上限等

server块主要是虚拟主机的配置

又分为了server全局块和location块

http {
        # 文件扩展名与文件类型映射表
    include       mime.types;
    # 默认文件类型
    default_type  Application/octet-stream;

    #默认编码
    #charset utf-8; 
    #服务器名字的hash表大小
    server_names_hash_bucket_size 128; 
    #上传文件大小限制
    client_header_buffer_size 32k; 
    #设定请求缓冲
    large_client_header_buffers 4 64k; 
     #设定请求缓冲
    client_max_body_size 8m;

    # 开启目录列表访问,合适下载服务器,默认关闭.
    # 显示目录
    autoindex on; 
    # 显示文件大小 默认为on,显示出文件的确切大小,单位是bytes 改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
    autoindex_exact_size on; 
    # 显示文件时间 默认为off,显示的文件时间为GMT时间 改为on后,显示的文件时间为文件的服务器时间
    autoindex_localtime on; 


        #日志格式化
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
        # 日志保存 日志的格式使用main
    #access_log  logs/access.log  main;


        # sendfile  高效传输文件的模式
    sendfile        on;
    # 将文件一次性一起传输给客户端,提高网络包的传输效率
    #tcp_nopush     on;
    # 开启实时传输,与tcp_nopush相反,只在长连接下有效
    #tcp_nodelay on;

        #连接超时时间
    #keepalive_timeout  0;
    keepalive_timeout  65;

    # FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度.下面参数看字面意思都能理解.
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;

        #gzip压缩
    #gzip  on;
    #允许压缩的页面的最小字节数,页面字节数从header偷得content-length中获取.默认是0,不管页面多大都进行压缩.建议设置成大于1k的字节数,小于1k可能会越压越大
    gzip_min_length 1k; 
    #表示申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
    gzip_buffers 4 16k; 
    #压缩版本(默认1.1,目前大部分浏览器已经支持gzip解压.前端如果是squid2.5请使用1.0)
    gzip_http_version 1.1; 
    #压缩等级.1压缩比最小,处理速度快.9压缩比最大,比较消耗cpu资源,处理速度最慢,但是因为压缩比最大,所以包最小,传输速度快
    gzip_comp_level 2; 
    #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn.
    gzip_types text/plain application/x-JAVAscript text/css application/xml;
    #选项可以让前端的缓存服务器缓存经过gzip压缩的页面.例如:用squid缓存经过nginx压缩的数据
    gzip_vary on;

    #实际的服务器列表
    #upstream myserver {
    #    server 127.0.0.1:8080;
    #    server 127.0.0.1:8082;
    #}

        # 虚拟主机设置
    server {
            #监听的端口号
        listen       8080;
        #访问域名
        server_name  localhost;
                #编码格式
        #charset koi8-r;
                #虚拟主机访问日志定义
        #access_log  logs/host.access.log  main;
                # url匹配
        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        # 禁止访问.ht文件
        #location ~ /.ht {
        #    禁止下载
        #    deny  all;
        #}
    }

    server
    {
        # 监听端口 HTTPS
        listen 443 ssl;
        server_name ably.com;

        # 配置域名证书
        ssl_certificate      /server/Certs/certificate.crt;
        ssl_certificate_key  /WebServer/Certs/private.key;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_protocols SSLv2 SSLv3 TLSv1;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers  on;

        index index.html index.htm index.php;
        root /data/www/;
        location ~ .*.(php|php5)?$
        {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi.conf;
        }

        # 配置地址拦截转发,解决跨域验证问题
        location /oauth/{
            proxy_pass https://localhost:13580/oauth/;
            proxy_set_header HOST $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        # 图片缓存时间设置
        location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
            expires 10d;
        }

        # JS和CSS缓存时间设置
        location ~ .*.(js|css)?$ {
            expires 1h;
        }

        # 日志格式设定
        log_format access '$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 access;

        # 设定查看Nginx状态的地址.StubStatus模块能够获取Nginx自上次启动以来的工作状态,此模块非核心模块,需要在Nginx编译安装时手工指定才能使用
        location /NginxStatus {
            stub_status on;
            access_log on;
            auth_basic "NginxStatus";
            auth_basic_user_file conf/htpasswd;
            #htpasswd文件的内容可以用apache提供的htpasswd工具来产生.
        }
    }
    include servers/*;
}

location配置

匹配规则

location有多种匹配规则[=|~|~*|^~] /url/

  • =表示精确匹配,优先级最高
  • ^~表示uri以某个字符串开头,即^~/spring/ 可以被所有以/spring/开头的匹配到
  • ~为区分大小写的正则匹配,如果使用!~则表示取反,不匹配的正则
  • ~*为不区分大小写的正则匹配,如果使用!~*则表示取反,不匹配的正则
  • /通用匹配,任何请求都会匹配到

静态文件路径

可以使用root或alias来指定静态资源文件路径,root可以配置在http块、server块、location块以及if块中,alias只能配置在location块中

root

使用root来表示请求的url时会进行完整的拼接,即如果请求使用的uri是/pic/index.html的话,使用root实际获取的是
/data/www/web/pic/index.html

location /pic/ {
    root /data/www/web;
}

alias

alias会将location中配置的路径丢弃掉,即即如果请求使用的uri是/pic/index.html的话,使用alias实际获取的是/data/www/web/index.html

location /pic/ {
    alias /data/www/web;
}

Nginx常见配置参数

  • servernameshashmaxsize 1024;
  • servernameshashbucketsize 512;
  • clientheaderbuffer_size 32k; # 客户端请求头部的缓冲区大
  • largeclientheader_buffers 4 32k;
  • clientmaxbody_size 10m;#设置最大的允许客户端请求主体的大小(上传文件大小限制), 默认为1m
  • clientbodybuffer_size 128k;
  • keepalive_timeout 60; #客户端连接超时时间,单位是秒, 默认是75秒
  • sendfile on; # 开启高效传输模式,默认为off
  • tcp_nopush on;
  • tcp_nodelay on;
  • ssi on; # 开启ssi支持,默认为false
  • ssisilenterrors on; # 设置为on表示在处理ssi文件时不输出错误信息,默认为false
  • ssitypes text/html; # 默认支持html ,如果需要支持shtml(服务器执行脚本),需要设置为ssitypes text/shtml
  • server_tokens off; # 关闭nginx版本号的显示,默认为on

Nginx优化相关参数

  • worker_processes 2; # 配置生成的worker process数量,一般为cpu核数
  • workerrlimitnofile 65536; # 一个nginx进程打开的最多文件描述符数目,一般设置为与系统设定的值相同(ulimit -n)
  • workercpuaffinity 01 10;# 为每个进程分配CPU的工作内核
  • use epoll; # 事务模型
events {
 use epoll; # 事务模型
 worker_connections 20000; # 一个nginx进程的连接数,nginx服务器允许的同事连接的客户端最大数量Client = worker_processes * worker_connections/2;
}

Nginx常见用法

依据UA屏蔽爬虫

if ($http_user_agent ~* "qihoobot|Baiduspider|googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou
spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") {
    return 403;
}

屏蔽IP访问

allow 133.27.182.82;
allow 113.106.18.0/24;
allow 121.201.104.0/24;
deny all;

使用Auth权限访问

auth_basic "bbs-auth";
auth_basic_user_file /usr/local/nginx/conf/bbsauthpwd;

限制带宽

# 用户下载达到 500k 后,便控制其速度在 50k 以内
location /download/ {
    limit_rate_after 500k;
    limit_rate 50k;
}

限制连接

# 定义了一个名为“down”,10M大小,以连接IP为key的连接数据存储空间
limit_conn_zone $binary_remote_addr zone=down:10m;

# 读取名为`down`连接数据存储空间的数据,限制每个key(上面是以ip作为IP) 最大同时连接数为4
location ~ .*.(rar|zip|apk)?$ {
    limit_conn down 4;
    limit_rate 150k;
}

limit_conn_log_level notice: 指定当触发limit的时候日志打印级别

限制请求

# 定义一个名为”one”, 10M大小,每秒1个请求的请求数据存储空间
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

# 引用名为“one”的存储空间,burst为等待请求数量数,当等待请求数量超过50个时,则抛出503错误,nodelay 针对的是 burst 参数,burst=50 nodelay 表示这50个请求立马处理,不能延迟,相当于特事特办。不过,即使这20个突发请求立马处理结束,后续来了请求也不会立马处理。burst=50 相当于缓存队列中占了50个坑,即使请求被处理了,这20个位置这只能按 100ms一个来释放
limit_req zone=one burst=50 nodelay;
limit_req_log_level notice: 指定当触发limit的时候日志打印级别

实时显示Nginx运行状况

在安装nginx是编译httpstubstatusmodule即可,使用参数为–with-httpstubstatusmodule

location /ngx_status {
    stub_status on;
    access_log on;
}

设置错误页面

error_page 404 /404.html

Nginx 常见错误码

  • 301 永久重定向
  • 302 临时重定向
  • 403 禁止访问
  • 404 文件不存在
  • 413 文件上传超过限制
  • 500 服务器错误
  • 502 后台服务器无响应
  • 504 Nginx超时,请求过多,工作进程不足


Tags:Nginx配置   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
在前面已经演示了nginx的安装以及常用命令,这一章节重点讲解nginx的配置文件。1. nginx配置文件路径:不同安装方式,nginx的文件存放路径也有所不同。源码编译安装方式:在安装目...【详细内容】
2021-07-19  Tags: Nginx配置  点击:(102)  评论:(0)  加入收藏
Nginx是现在最火的服务器web和反向代理服务器,反向代理是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给inte...【详细内容】
2021-07-09  Tags: Nginx配置  点击:(82)  评论:(0)  加入收藏
前言由于现在需要部署nginx的docker,希望nginx配置文件里面有关server_name在启动容器前动态修改。 但是由于nginx的配置文件不支持使用环境变量。网上找了好些方案,最终选择...【详细内容】
2021-06-02  Tags: Nginx配置  点击:(134)  评论:(0)  加入收藏
#定义Nginx运行的用户和用户组user www www; #nginx进程数,建议设置为等于CPU总核心数。worker_processes 8; #全局错误日志定义类型,[ debug | info | notice | warn | error...【详细内容】
2021-04-30  Tags: Nginx配置  点击:(209)  评论:(0)  加入收藏
Nginx配置详解Nginx的配置是在nginx.conf中进行配置的主要由三部分组成 全局块 events块 http块全局块从配置文件开始到events块之间的内容是全局块,主要用来配置Nginx服务...【详细内容】
2021-04-12  Tags: Nginx配置  点击:(227)  评论:(0)  加入收藏
负载均衡负载均衡实现利用服务器集群处理客户端请求,提高访问效率,降低服务器响应压力。负载均衡的调度算法含义参照:Nginx入门介绍。通过修改nginx.conf配置文件(详见Nginx中n...【详细内容】
2021-01-27  Tags: Nginx配置  点击:(233)  评论:(0)  加入收藏
安装所需插件1、安装gccgcc是linux下的编译器在此不多做解释,感兴趣的小伙伴可以去查一下相关资料,它可以编译 C,C++,Ada,Object C和Java等语言命令:查看gcc版本gcc -v 一般阿...【详细内容】
2020-12-17  Tags: Nginx配置  点击:(135)  评论:(0)  加入收藏
假设Kubernetes集群已经配置好,我们将基于CentOS为Nginx创建一个虚拟机。以下是实验种设置的详细信息: Nginx (CenOS8 Minimal) - 192.168.1.50 Kube Master - 192.168.1.40 K...【详细内容】
2020-12-15  Tags: Nginx配置  点击:(134)  评论:(0)  加入收藏
作为一名程序员,特别是后端程序员,给你的项目配置Https是比较常见的事,特别是很多时候必须要使用https,比如微信小程序生产环境的接口地址就必须要https域名。那么如何给域名配...【详细内容】
2020-11-23  Tags: Nginx配置  点击:(113)  评论:(0)  加入收藏
不知道各位有没有被各类XSS攻击、点击劫持 (ClickJacking、 frame 恶意引用等等方式骚扰过,百度联盟被封就有这些攻击的功劳在里面。为此一直都在搜寻相关防御办法,...【详细内容】
2020-09-21  Tags: Nginx配置  点击:(145)  评论:(0)  加入收藏
▌简易百科推荐
阿里云镜像源地址及安装网站地址https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b111kK44P更新源之前把之前的国外的镜像先备份一下 切换到yumcd...【详细内容】
2021-12-27  干程序那些事    Tags:CentOS7镜像   点击:(1)  评论:(0)  加入收藏
前言在实现TCP长连接功能中,客户端断线重连是一个很常见的问题,当我们使用netty实现断线重连时,是否考虑过如下几个问题: 如何监听到客户端和服务端连接断开 ? 如何实现断线后重...【详细内容】
2021-12-24  程序猿阿嘴  CSDN  Tags:Netty   点击:(12)  评论:(0)  加入收藏
一. 配置yum源在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repovim /etc/yum.repos.d/google-chrome.repo按i进入编辑模式写入如下内容:[google-chrome]name=googl...【详细内容】
2021-12-23  有云转晴    Tags:chrome   点击:(7)  评论:(0)  加入收藏
一. HTTP gzip压缩,概述 request header中声明Accept-Encoding : gzip,告知服务器客户端接受gzip的数据 response body,同时加入以下header:Content-Encoding: gzip:表明bo...【详细内容】
2021-12-22  java乐园    Tags:gzip压缩   点击:(8)  评论:(0)  加入收藏
yum -y install gcc automake autoconf libtool makeadduser testpasswd testmkdir /tmp/exploitln -s /usr/bin/ping /tmp/exploit/targetexec 3< /tmp/exploit/targetls -...【详细内容】
2021-12-22  SofM    Tags:Centos7   点击:(7)  评论:(0)  加入收藏
Windows操作系统和Linux操作系统有何区别?Windows操作系统:需支付版权费用,(华为云已购买正版版权,在华为云购买云服务器的用户安装系统时无需额外付费),界面化的操作系统对用户使...【详细内容】
2021-12-21  卷毛琴姨    Tags:云服务器   点击:(6)  评论:(0)  加入收藏
参考资料:Hive3.1.2安装指南_厦大数据库实验室博客Hive学习(一) 安装 环境:CentOS 7 + Hadoop3.2 + Hive3.1 - 一个人、一座城 - 博客园1.安装hive1.1下载地址hive镜像路径 ht...【详细内容】
2021-12-20  zebra-08    Tags:Hive   点击:(9)  评论:(0)  加入收藏
以下是服务器安全加固的步骤,本文以腾讯云的CentOS7.7版本为例来介绍,如果你使用的是秘钥登录服务器1-5步骤可以跳过。1、设置复杂密码服务器设置大写、小写、特殊字符、数字...【详细内容】
2021-12-20  网安人    Tags:服务器   点击:(7)  评论:(0)  加入收藏
项目中,遇到了一个问题,就是PDF等文档不能够在线预览,预览时会报错。错误描述浏览器的console中,显示如下错误:nginx代理服务报Mixed Content: The page at ******** was loaded...【详细内容】
2021-12-17  mdong    Tags:Nginx   点击:(7)  评论:(0)  加入收藏
转自: https://kermsite.com/p/wt-ssh/由于格式问题,部分链接、表格可能会失效,若失效请访问原文密码登录 以及 通过密钥实现免密码登录Dec 15, 2021阅读时长: 6 分钟简介Windo...【详细内容】
2021-12-17  LaLiLi    Tags:SSH连接   点击:(16)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条