nginx配置文件解析加讲解

nginx的组成部分(初始配置)

一般nginx配置文件分为三个部分:main全局块(全局设置)、events块(主机设置)、http块(服务器)

worker_processes  1;   #最大的线程数,可以设置成auto(根据系统自动获取)

events {
    worker_connections  1024;  #最大的连接数,他可以是最大文件数除以2也可以写最大65535
}

http {
    include       mime.types;   #引用文件
    default_type  application/octet-stream;
    sendfile        on;   # 高效传输模式。开启后,传输只需要2步,不开启需要4步,降低阻塞率
    keepalive_timeout  65;  #从三握开始如果65秒没有动作,,直接断开连接

    server {
        listen       80;  #端口号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主要配置文件优化

worker_processes  auto;  
	#最大线程数 
worker_cpu_affinity auto; 
	#线程优化auto也行
worker_rlimit_nofile 65535;  
	#打开最大文件数,一般是65535
events {   
	#这是他输入main配置里面处理线程连接的配置
 worker_connections  65535;
	 #最大连接数,最大文件数除2或者直接是65535
 use epoll; 
	 #事件模型nginx就用这个
}
http {
include       mime.types;  
	#请求的文件类型在请求头能看见,include是引用文件
default_type  application/octet-stream;
	#如果不走上面的话,就走下边
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                                    '$status $body_bytes_sent "$http_referer" '
                                    '"$http_user_agent" "$http_x_forwarded_for"';

	#日志格式,log_format(表示日志格式前缀)main(引用日志格式名称)后面是日志格式
log_format   sjb '$remote_addr - $remote_user';
	#添加了一个日志格式,只显示IP地址和用户
access_log      logs/80_log  main;
	访问日志,日志保存目录,日志名字,引用的日志格式
#access_l;
sendfile        on;
	#高效传输模式 开启后 传输文件只需要2步  不开启传数文件要4步...降低阻塞率
#keepalive_timeout  0;
keepalive_timeout  45;
	#TCP长连接 就是你进来之后我就给你打开一个大门 让你随便拿东西 45秒直到你断开 这是你三次握手之后开始计时
send_timeout  15;
	#监听如果45内 你没有动作了 超过15秒就给你四次挥手 是你停止动作了开始计时
tcp_nodelay on;
	#ON 会增加小包的数量,但是可以提高响应速度。在及时性高的通信场景中应该会有不错的效果
	#OFF 会增加通信的延时,但是会提高带宽利用率。在高延时、数据量大的通信场景中应该会有不错的效果
gzip  on; 
	#开启压缩就是浏览器烟的文件,是压缩之后再输出,如果没有下边的指定,会自动不压缩
gzip_types text/plain application/x-javascript text/css  application/xml application/javascript ;
	#指定压缩类型
gzip_comp_level 6;  
	#压缩等级,最大是9,默认是5,越大越狠,但是CPU消耗比较大
server {
	#这是一个网站
        listen       80;
	#默认端口是80
        server_name  localhost;
	#域名
rewrite /sohu www.sohu.com permanent;
	#这里是跳转,搜狐网站
          location ~ \ *.jpg$ {
	#是网页里面查找图片
            root /2020;
	#默认在什么地方查找
error_log logs/404_log  sjb;
	#访问图片时,报错日志,引用的是sjb格式,
}
 location / {
            root   html;
            index  index.html index.htm;
        }
 error_page   500 502 503 504  /50x.html;
	#服务器报错,自动跳转文件
        location = /50x.html {
	#文件名称
            root   html;
	#文件所处的位置
   #deny  all;
	#拒绝所有人访问该文件
        }
 location ~ \.php$ {
	#访问PHP文件的格式
            root           /2020;
	#访问的PHP格式的文件默认地址
            fastcgi_pass   127.0.0.1:9000;
	#默认,跟PHP进行通讯
        #    fastcgi_index  index.php;
	#默认访问的文件
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
	#$document_root 是你的网站根目录的路径 是你请求的文件的名字 意思就是去你的网站根目录下找你要的php文件并解析给他
            include        fastcgi_params;
	#fastcgi 配置文件
        }
}

日志优化

location = /robots.txt { access_log off; log_not_found off; error_log /dev/null; }
location = /favicon.ico { access_log off; log_not_found off; error_log /dev/null; }.
#这里是把强制刷新的访问、找不到日志关闭,错误日志扔掉垃圾桶

nginx监控

1.首先看一看nginx -V 有哪些模块
2.然后到nginx安装包中找到configure
./configure --with-http_gzip_static_module --http-client-body-temp-path=/var/temp/nginx/client --http-proxy-temp-path=/var/temp/nginx/proxy --http-fastcgi-temp-path=/var/temp/nginx/fastcgi --http-uwsgi-temp-path=/var/temp/nginx/uwsgi --http-scgi-temp-path=/var/temp/nginx/scgi --with-pcre  --with-http_stub_status_module
#--with-http_stub_status_module这个是监控模块,一定记住,不能漏掉之前nginx拥有的模块
3.去nginx配置文件添加一个
location ***{
stud_status on;
#打开监控
}
4.对原有的命令进行备份
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
#安装包里有objs文件去找nginx
cp ./nginx /usr/local/nginx/sbin/nginx
5.关闭nginx服务,启动服务
nginx -s stop
nginx -c /usr/local/nginx/conf/nginx.conf
6.查看模块是否添加
nginx -V # 添加成功后启动服务
systemctl start nginx 

控制访问权限

#在任何的界面都可以设置限制访问权限
allow IP地址 ;#让某个IP地址不能访问
deny IP地址 ; #限制这个IP地址不能访问
allow all ; #让所有IP地址都不能访问
deny all ; #限制所有IP地址都不能访问,包括自己  

列出linux中的列表

location =1.html { # on打开,off关闭
	root /html ;
	autoindex on; # 还是自动打开index
	autoindex_exact_size on; # 列出目录并显示大小
	autoindex_localtime on; # 修改显示时间
}

设置文件缓存

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
	#过期时间为30天,
	#图片文件不怎么更新,过期可以设大一点,
	#如果频繁更新,则可以设置得小一点。
	expires 30d; # d是天,m是分钟,s是秒,一般在网页显示的是多少秒
}

设置请求限制

# 注:必须在http里面,不能再server和location里面
 limit_req_zone $binary_remote_addr zone=allips:10m rate=5r/s; # 这里是每秒可以请求5次  
# 在location里面调用
 limit_req zone=allips ;#也可添加允许超过次数   burst=5 nodelay

设置IP高并发(限制多少人同时访问)

# 注:必须在http里面,不能再server和location里面
 limit_conn_zone $binary_remote_addr zone=one:10m;
 # 在location里面调用
 limit_conn one 2;# 连接数限制
 limit_rate 300k;	#单个连接限制带宽

nginx伪静态

+ # 表示匹配前面的子表达式一次或多次(大于等于1次)
. # 匹配除换行符以外的任意字符 (.+) 匹配任意字符最少一次
\d # 匹配数字 (\d+) 匹配数字最少一次
\w # 匹配字母或数字或下划线或汉字  (\w+) 匹配字母或数字或下划线或汉字最少一次
# 在location里面添加
rewrite /(.+)-(d+).get /get.php?name=$1&age=$2 last ;

nginx加密访问

  1. 安装 htpasswd 工具

    > yum install httpd-tools -y
    
  2. 设置用户名和密码,并把用户名、密码保存到指定文件中:

    > mkdir /usr/local/nginx/conf/passwd # 创建密码文件夹
    > htpasswd -c passwd/passwd 用户名  # 创建密码
     New password: 
     Re-type new password: 
     Adding password for user 用户名
    > cat passwd/passwd 
    用户名:$apr1$J5Sg0fQD$KDM3Oypj8Wf9477PHDIzA0
    
  3. 修改 nginx 配置文件

    server {
        listen 80;
        server_name  localhost;
        .......
        #新增下面两行
        auth_basic "Please input password"; #这里是验证时的提示信息
        auth_basic_user_file /usr/local/nginx/conf/passwd/passwd; # 这里是密码文件,可以填写绝对路径
        location /{
        .......
        }
    

    htpasswd 命令

    • htpasswd命令选项参数说明:

      -c 创建一个加密文件
      
      -n 不更新加密文件,只将htpasswd命令加密后的用户名密码显示在屏幕上 
      
      -m 默认htpassswd命令采用MD5算法对密码进行加密
      
      -d htpassswd命令采用CRYPT算法对密码进行加密
      
      -p htpassswd命令不对密码进行进行加密,即明文密码
      
      -s htpassswd命令采用SHA算法对密码进行加密
      
      -b htpassswd命令行中一并输入用户名和密码而不是根据提示输入密码
      
      -D 删除指定的用户
      
    • htpasswd例子

      > htpasswd -bc passwd sandu pass # htpasswd命令添加用户 在当前目录下生成一个.passwd文件,用户名sandu,密码:pass,默认采用MD5加密方式 添加用户不推荐上面
      > htpasswd -b passwd 用户名 后面跟着密码 # 在原有密码文件中增加下一个用户
      > htpasswd -D passwd 用户名 # 删除用户
      

      压力测试

      1. 安装

        > wget http://120.53.7.204/webbench-1.5.tar.gz
        
      2. 解压并且 make && maike install

        > mkdir -p /usr/local/man/man1
        > make && make install
        
      3. 使用

        webbench -c 1000 -t 10 域名
        	-c 并发多少量
        	-t 运行测试多长时间
        ####
        1000 clients, running 10 sec.
        # 1000个并发 运行了10秒
        Speed=11964 pages/min, 10327965 bytes/sec.
        Requests: 1994 susceed, 0 failed
        # Pages/min:指的输出页数/分 
        # bytes/sec:是指字节/秒
        # 这两个指标能反应网站的访问速度。susceed和failed表示请求的成功数目和失败数目,失败的原因虽然没有日志但是应该能猜出是get请求得不到200的响应。
        
      4. 抵挡恶意的压力测试攻击

        if ($http_user_agent ~ “WebBench”) {
        	set $block_user_agents 1;
        }
        if ($block_user_agents = 1) { 
        	return 444; 
        } 
        # 加上这个 然后再做一个限流
        

Linux运维技术交流群:QQ:833196402

Python技术交流群:QQ:971440453

大数据运维技术交流群:QQ:766173537

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值