nginx配置文件详解笔记

web运维第一篇:nginx配置文件详解笔记
#定义Nginx运行的用户和用户组
user www www;
#nginx进程数,建议设置为等于CPU总核心数。
worker_processes 8;
#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log info;
#进程文件
pid /var/run/nginx.pid;
#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。
worker_rlimit_nofile 65535;
#工作模式与连接数上限
events
{
    #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
    use epoll;
    #单个进程最大连接数(最大连接数=连接数*进程数)
    worker_connections 65535;
}

#设定http服务器
http
{
    include mime.types; #文件扩展名与文件类型映射表
    default_type application/octet-stream; #默认文件类型
    #charset utf-8; #默认编码
    server_names_hash_bucket_size 128; #服务器名字的hash表大小
    client_header_buffer_size 32k; #上传文件大小限制
    large_client_header_buffers 4 64k; #设定请求缓
    client_max_body_size 8m; #设定请求缓
    sendfile on; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
    autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
    tcp_nopush on; #防止网络阻塞
    tcp_nodelay on; #防止网络阻塞
    keepalive_timeout 120; #长连接超时时间,单位是秒
    #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; #开启gzip压缩输出
    gzip_min_length 1k; #最小压缩文件大小
    gzip_buffers 4 16k; #压缩缓冲区
    gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
    gzip_comp_level 2; #压缩等级
    gzip_types text/plain application/x-javascript text/css application/xml;
    #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
    gzip_vary on;
    gzip_disable     "MSIE [1-6]\.";  #ie6以下的版本不开启压缩
    #limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用

upstream www.itnihao.com {
    #upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
    server 10.10.10.10:80 weight=3 max_fails=2 fail_timeout=30s;
    server 10.10.10.11:80 weight=4 max_fails=2 fail_timeout=30s;
    server 10.10.10.12:80 weight=3 max_fails=2 fail_timeout=30s;
}

#虚拟主机的配置
server
{
    #监听端口
    listen 80;
    #域名可以有多个,用空格隔开
    server_name www.itnihao.com itnihao.com;
    index index.html index.htm index.php;
    root /data/web/www;
    #防止系统目录被访问
    location ~ (/.svn/|etc/passwd|etc/shadow|etc/group|etc/gshadow|etc/sudoers|nginx/nginx.conf|etc/my.cnf|sshd_config|ifconfig|bin/rm|bin/mkdir|bin/rmdir|bin/touch|usr/bin/vim|rsync.conf|redis.conf)
    {
        deny all;
    }

#php解析
    location ~ .*.(php|php5)?$
    {
        #fastcgi_pass   unix:/tmp/fpm.sock;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;

}
   
    #日志格式设定
    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/www.itnihao.com.access.log access;
    #对 "/" 启用反向代理
    location / {
        #如果后端的服务器返回502,504,执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移
        proxy_next_upstream http_502 http_504 error timeout invalid_header;
        #代理的服务器池名称
        proxy_pass http://www.itnihao.com;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #以下是一些反向代理的配置,可选。
        proxy_set_header Host $host;
        client_max_body_size 10m; #允许客户端请求的最大单文件字节数
        client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
        proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
        proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
        proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
        proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
        proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
        proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
        proxy_temp_file_write_size 64k;
        #设定缓存文件夹大小,大于这个值,将从upstream服务器传
        
        if ($http_user_agent ~ (curl|LWP::Simple|winhttp|clshttp|HTTrack|harvest|nsauditor|dirbuster|pangolin|nmap|sqlninja|grendel-scan|hydra|perl|HTMLParser|libwww|BBBike|sqlmap|w3af|owasp|Nikto|fimap|havij|PycURL|sae|zmeu|BabyKrokodil|python|netsparker|httperf|ApacheBench|webbench|JoeDog))
        {
              return 443;
        }
        #拒绝非法浏览器访问
        
    }
    #设定查看Nginx状态的地址
    location /NginxStatus {
        stub_status on;
        access_log off;
        #auth_basic "NginxStatus";
        #auth_basic_user_file conf/htpasswd;
        #htpasswd文件的内容可以用apache提供的htpasswd工具来产生。
        allow 127.0.0.1;
        allow 192.168.11.0/24;
        deny all; 
    }
    #php-fpm的状态查看
    #需要开启php-fpm.conf中的pm.status_path = /phpfpmstatus
    location ~ ^/(phpfpmstatus)$ {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/fpm.sock;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
    }

#本地动静分离反向代理配置
    #所有jsp的页面均交由tomcat或resin处理
    location ~ .(jsp|jspx|do)?$ {
        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://127.0.0.1:8080;
    }
    #所有静态文件由nginx直接读取不经过tomcat或resin
    location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
        {
        expires 15d;
    }
   }
}
       
nginx的调度算法
nginx的调度算法
1.轮询调度算法(Round-Robin Scheduling):
    轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数)
    对于一级后端服务器群,形成一个环队列的形式,对于每个到达的请求按时间顺序顺次分配给这些后端服务器。在前端调度器与后端服务器之间采用“心跳”方式进行状态检查,如果发现后端服务器宕机,则将其删除。
    这种方式为默认配置,优点是简洁,但缺点是无法进行最优化调度,有可能有的请求需要耗时较久,这样会带来一定的不平衡。
upstream lb {
        server 10.10.57.122:80;
        server 10.10.57.123:80;
}
2. 加权轮询
    这是一种对上述方式的改进,引入权值的概念,能够解决后端服务器性能不均的情况

upstream lb {
        server 10.10.57.122:80 weight=5;
        server 10.10.57.123:80 weight=10;
}
3.ip_hash:同一个ip总是被转发同一server
    这是一种非轮询式方式,对于每个到达的请求,直接通过其请求IP进行哈希的映射,通过映射结果获得那一台后端服务器要处理这个请求,这种方式有一个明显的好处是能够保证session的唯一性。
upstream lb {
        ip_hash;
        server 10.10.57.122:80;
        server 10.10.57.123:80;
}
4.url_hash(基于URL的哈希方式)  
    这种方式与IP的哈希方式类似,是对客户机请求的URL进行哈希操作,这样的方式有一个明显的好处是,能够便于内容缓存的实现,对于经常性的资源访问,采
upstream lb {
         server 10.10.57.122:80;
         server 10.10.57.123:80;
         hash $request_uri;
}
5.fair
    这种方式是根据服务器端的动态响应,对每一个请求进行分配。 这种方式能够自动根据当前的后端实际负载来优化。
upstream lb {
         server 10.10.57.122:80;
         server 10.10.57.123:80;
         fair;
}
          
nginx防盗链
server {
        listen 80;
        server_name www.itnihao.com;
        charset utf-8;
        root /var/web/www;
        index index.php;

location / {
        valid_referers none blocked www.itnihao.com;

if ($invalid_referer) {
             return   411;
           }
        }
}
          
用curl测试
curl http://www.itnihao.com -A "user_agentd" -e "http://www.itnihao.com"
返回200
curl http://www.itnihao.com -A "user_agentd" -e "http://www.itnihao.net"
返回411
这里只有一个重要的指令valid_referers:
这个指令在referer头的基础上为 $invalid_referer 变量赋值,其值为0或1。
可以使用这个指令来实现防盗链功能,如果valid_referers列表中没有Referer头的值, $invalid_referer将被设置为1。
参数可以使如下形式:
none意为不存在的Referer头
blocked意为根据防火墙伪装Referer头,如:“Referer: XXXXXXX”。
server_names为一个或多个服务器的列表,0.5.33版本以后可以在名称中使用“*”通配符
nginx连接状态解释
Active connections //当前 Nginx 正处理的活动连接数。
server accepts handled requests //总共处理了多少个连接 |成功创建多少次握手|总共处理了多少个请求。
Reading //nginx 读取到客户端的 Header 信息数。
Writing //nginx 返回给客户端的 Header 信息数。
Waiting //开启 keep-alive 的情况下,这个值等于 active – (reading + writing),意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接
测试url返回状态
curl -o /dev/null -s -w %{http_code} http://www.itnihao.com 
tcp连接状态
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫 
SYN_RECV:一个连接请求已经到达,等待确认 
SYN_SENT:应用已经开始,打开一个连接 
ESTABLISHED:正常数据传输状态 
FIN_WAIT1:应用说它已经完成 
FIN_WAIT2:另一边已同意释放 
ITMED_WAIT:等待所有分组死掉 
CLOSING:两边同时尝试关闭 
TIME_WAIT:另一边已初始化一个释放 
LAST_ACK:等待所有分组死掉 
统计tcp连接状态数

netstat -n|awk ‘/^tcp/ {++S[$NF]} END {for (a in S) print a,S[a]}‘

时间: 2024-12-16 11:37:07

nginx配置文件详解笔记的相关文章

web运维第一篇:nginx配置文件详解笔记

#定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] error_log /var/log/nginx/error.log info; #进程文件 pid /var/run/nginx.pid; #一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值

Nginx 配置文件详解

Nginx 配置文件详解 user nginx ; #用户 worker_processes 8; #工作进程,根据硬件调整,大于等于cpu核数 error_log logs/nginx_error.log crit; #错误日志 pid logs/nginx.pid; #pid放置的位置 worker_rlimit_nofile 204800; #指定进程可以打开的最大描述符 这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文 件数(ulimit -n)与ngin

RHEL7下Nginx配置文件详解(二)

RHEL7下Nginx配置文件详解 全局配置 #user  nobody nobody;//指定Nginx进程运行用户以及用户组. worker_processes  1;//开启的进程数. #error_log  logs/error.log;//定义全局错误日志 #error_log  logs/error.log  notice; //定义全局错误日志 #error_log  logs/error.log  info; //定义全局错误日志 #pid        logs/nginx.p

LAMP架构(nginx安装,默认虚拟主机,用户认证,域名重定向,nginx配置文件详解)

一.安装nginx [[email protected] conf]# wget http://nginx.org/download/nginx-1.8.0.tar.gz [[email protected] conf]# tar zxvf nginx-1.8.0.tar.gz [[email protected] conf]# cd nginx-1.8.0 [[email protected] conf]# ./configure --prefix=/usr/local/nginx [[ema

nginx之旅第一篇:nginx下载安装、nginx配置文件详解、nginx默认网站

一.nginx下载安装 版本nginx 1.15.5 系统环境centos7.5(本机ip192.168.199.228) 关闭selinux 和防火墙firewall 1.下载 wget http://nginx.org/download/nginx-1.15.5.tar.gz -P /usr/src 2.安装 安装大概过程 配置---编译---安装 配置 1)检查环境 是否 满足安装条件 依赖解决 2)指定安装方式 配置文件 命令文件 各种文件放哪里 开启模块功能[内 置模块 三方模块] 3

通过现象看本质——Nginx配置文件详解

通过现象看本质--Nginx配置文件详解 前言 ? 前面的文章讲述了有关Nginx进程模型以及基于异步非阻塞机制使得Nginx支持高并发的一些内容.本文将详述有关Nginx的配置文件(主配置文件nginx.conf文件)以及Nginx的体系结构. Nginx配置文件概述 ? 在我们解压后的Nginx目录中的conf目录下就是有关Nginx的配置文件,当然一般我们玩儿的主要是Nginx的配置文件多一点,而其他的配置文件均是纯文本文件.那么本小节就其中的主要配置作解释与介绍. ? 当然,在介绍之前,

nginx配置文件详解(三)

nginx块指令: 全局块:配置nginx全局的指令 events块:配置nginx与用户连接相关指令 http块:提供HTTP服务 server块:配置虚拟主机,一个http可以有多个server location块:匹配URL后需要做的相关操作. nginx.conf配置文件详解: 全局块: user   指定默认用户 worker_processes  1; 指定工作进程数.和cpu核数相关.cpu核数*2 worker_rlimit_nofile 102400; 进程打开的最大文件数.

linux笔记之Nginx配置文件详解

以下通过介绍常用模块来讲解Nginx配置文件指令(以下内容都是参照官方网站) 1.Nginx的主模块的常用配置指令: (1)error_log 语法:error_log  file  [debug | info | notice | wran | error | crit ] 默认值:${prefix}/logs/error.log 指定Nginx服务(与FastCGI)错误日志文件位置. 每个字段的错误日志等级默认值:main字段:error     HTTP字段:crit       ser

【Nginx笔记】nginx配置文件详解

本文主要对nginx的配置做重点说明,关于nginx的其它基本概念,建议参考官网描述,这里推荐Nginx Beginner's Guide这篇文档,对初学者快速认识nginx很有帮助. 显然,发挥nginx强大优势的前提是熟悉其配置文件并进行合理的配置,而学习nginx配置时,最重要的一点是建立如下概念: The most important is that nginx is a reverse proxy first and HTTP server second, its first conc