众客华禹

 找回密码
立即注册

QQ登录

只需一步,快速开始

查看: 343|回复: 0

nginx配置讲解

[复制链接]

70

主题

70

帖子

378

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
378
发表于 2022-2-18 16:37:08 | 显示全部楼层 |阅读模式
一、nginx配置文件
     nginx主配置文件/etc/nginx/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。一般,每个区块以一对大括号{}来表示开始与结束。
1、nginx配置文件层次划分
     1)Main位于nginx.conf配置文件的最高层
     2)Main层下可以有Event、HTTP层
     3)HTTP层下面有允许有多个Server层, 用于对不同的网站做不同的配置
     4)Server层也允许有多个Location, 用于对不同的路径进行不同模块的配置
2、nginx配置文件注释
  1. //nginx默认配置语法
  2. worker_processes    //工作进程, 配置和CPU个数保持一致
  3. error_log           //错误日志, 后面接入的是路径
  4. pid                 //Nginx服务启动时的pid

  5. //events事件模块
  6. events {     
  7.     worker_connections  1024;   //每个worker进程支持的最大连接数
  8.     use                         //内核模型,select,poll,epoll
  9. }

  10. //非虚拟主机的配置或公共配置定义在http{}段内, server{}段外
  11. http {
  12. ...   
  13.     //必须使用虚拟机配置站点, 每个虚拟机使用一个server{}段
  14.     server {
  15.         listen       80;    //监听端口, 默认80
  16.         server_name  localhost; //提供服务的域名或主机名
  17.         
  18.         //控制网站访问路径
  19.         location / {
  20.             root   /usr/share/nginx/html;   //存放网站路径
  21.             index  index.html index.htm;    //默认访问首页文件
  22.         }
  23.         //错误页面,统一定义错误页面,定义请求错误, 指定错误代码则。
  24.         error_page   500 502 503 504  /50x.html;

  25.         //错误代码重定向到新的Locaiton
  26.         location = /50x.html {
  27.             root   html;
  28.         }
  29.     }
  30. }
复制代码
3、nginx日志配置规范
  1. //配置语法: 包括: error.log access.log
  2. Syntax: log_format name [escape=default|json] string ...;
  3. Default:    log_format combined "...";
  4. Context:    http

  5. //Nginx默认配置
  6. log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  7.                    '$status $body_bytes_sent "$http_referer" '
  8.                   '"$http_user_agent" "$http_x_forwarded_for"';

  9. $remote_addr    //表示客户端地址
  10. $remote_user    //http客户端请求nginx认证用户名
  11. $time_local     //Nginx的时间
  12. $request        //Request请求行, GET等方法、http协议版本
  13. $status         //respoence返回状态码
  14. $body_bytes_sent    //从服务端响应给客户端body信息大小
  15. $http_referer       //http上一级页面, 防盗链、用户行为分析
  16. $http_user_agent    //http头部信息, 客户端访问设备
  17. $http_x_forwarded_for   //http请求携带的http信息
复制代码
4、nginx配置状态监控
  1. –with-http_stub_status_module记录Nginx客户端基本访问状态信息

  2. location /mystatus {
  3.     stub_status on;
  4.     access_log off;
  5. }

  6. //Nginx_status概述
  7. Active connections:2    //Nginx当前活跃连接数
  8. server accepts handled requests
  9. 16     16     19
  10. server表示Nginx启动到现在共处理了16个连接。
  11. accepts表示Nginx启动到现在共成功创建16次握手。
  12. 请求丢失数=(握手数-连接数)可以看出,本次状态显示没有丢失请求。
  13. handled requests,表示总共处理了19次请求。
  14. Reading     Nginx读取到客户端的 Header 信息数。
  15. Writing     Nginx返回给客户端的 Header 信息数。
  16. Waiting    Nginx开启keep-alive长连接情况下, 既没有读也没有写, 建立连接情况
复制代码
5、nginx配置下载站点
  1. //开启目录浏览
  2. server {
  3.         listen 8888;
  4.         server_name localhost;
  5.         charset utf-8;                     #设置中文字符集

  6.         location / {
  7.         root  /data;                                                                                                
  8.              autoindex on;                     #打开目录浏览功能
  9.              autoindex_exact_size off;         #关闭字节显示(会以MB的方式显示)
  10.              autoindex_localtime on;           #打开会显示文件上传的本地的时间(默认格林威治时间-8h)
  11.         }
  12.     }

  13. //autoindex常用参数
  14. autoindex_exact_size off;
  15. 默认为on, 显示出文件的确切大小,单位是bytes。
  16. 修改为off,显示出文件的大概大小,单位是kB或者MB或者GB。

  17. autoindex_localtime on;
  18. 默认为off,显示的文件时间为GMT时间。
  19. 修改为on, 显示的文件时间为文件的服务器时间。

  20. charset utf-8,gbk;
  21. 默认中文目录乱码,添加上解决乱码。
复制代码
6、nginx配置访问限制
  1. 连接频率限制 limit_conn_module
  2. 请求频率限制 limit_req_module
  3. http协议的连接与请求:HTTP是建立在TCP, 在完成HTTP请求需要先建立TCP三次握手(称为TCP连接),在连接的基础上在HTTP请求。
  4. HTTP请求建立在一次TCP连接基础上,一次TCP请求至少产生一次HTTP请求。
  5. HTTP协议版本           连接关系
  6. HTTP1.0         TCP不能复用
  7. HTTP1.1                顺序性TCP复用
  8. HTTP2.0        多路复用TCP复用
复制代码
连接限制配置:
  1. //全局定义连接限制
  2. Syntax:  limit_conn_zone key zone=name:size;
  3. Default: —
  4. Context: http
  5. //引用连接限制
  6. Syntax: limit_conn zone number;
  7. Default: —
  8. Context: http, server, location

  9. //具体配置如下:
  10. http {
  11. //http段配置连接限制, 同一时刻只允许一个客户端IP连接
  12. limit_conn_zone $binary_remote_addr zone=conn_zone:10m;
  13.     ...
  14.     server {
  15.     ...  
  16.         location / {
  17.         //同一时刻只允许一个客户端IP连接
  18.             limit_conn conn_zone 1;
  19.         }

  20. //压力测试
  21. yum install -y httpd-tools
  22. ab -n 50 -c 20 http://127.0.0.1/index.html
复制代码
请求限制配置:
  1. //全局定义请求限制
  2. Syntax:  limit_conn_zone key zone=name:size rate=rate;
  3. Default: —
  4. Context: http
  5. //引用请求限制
  6. Syntax: limit_conn zone number [burst=number] [nodelay];
  7. Default: —
  8. Context: http, server, location

  9. //具体配置如下:
  10. http {
  11. //http段配置请求限制, rate限制速率,限制一秒钟最多一个IP请求
  12. limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
  13.     ...
  14.     server {
  15.     ...  
  16.         location / {
  17.         //1r/s只接收一个请求,其余请求拒绝处理并返回错误码给客户端
  18.             limit_req zone=req_zone;
  19.         //请求超过1r/s,剩下的将被延迟处理,请求数超过burst定义的数量, 多余的请求返回503
  20.             #limit_req zone=req_zone burst=3 nodelay;
  21.         }

  22. //压力测试
  23. yum install -y httpd-tools
  24. ab -n 50 -c 20  http://127.0.0.1/index.html
复制代码
     备注:多个请求可以建立在一次的TCP连接之上, 那么我们对请求的精度限制,当然比对一个连接的限制会更加的有效。 因为同一时刻只允许一个连接请求进入。但是同一时刻多个请求可以通过一个连接进入。所以请求限制才是比较优的解决方案。

7、nginx访问控制
  1. 基于IP的访问控制 http_access_module
  2. 基于用户登陆认证 http_auth_basic_module
  3. 基于IP的访问控制:

  4. //允许配置语法
  5. Syntax: allow address | CIDR | unix: | all;
  6. Default:    —
  7. Context:    http, server, location, limit_except
  8. //拒绝配置语法
  9. Syntax: deny address | CIDR | unix: | all;
  10. Default:    —
  11. Context:    http, server, location, limit_except

  12. //配置拒绝某一个IP, 其他全部允许
  13. location ~ ^/index.html {
  14.     root /usr/share/nginx/html;
  15.     index index.html;
  16.     deny 192.168.0.1;
  17.     allow all;
  18. }

  19. //只允许某一个网段访问,其它全部拒绝
  20. location / {
  21.     root   html;
  22.     index  index.php index.html index.htm;
  23.     allow   192.168.0.0/24;
  24.     deny    all;
  25. }
  26. http_access_module局限性:如果经过多个中间代理服务器,如Nginx、7lay LSB、CDN,会导致客户端访问被拒绝问题。因为IP3获得的是代理服务器的IP2地址,不是真正发起http请求的客户端IP1地址。
复制代码

解决方式
1)采用HTTP头信息控制访问, 代理以及web服务开启http_x_forwarded_for
2)结合geo模块作
3)通过HTTP自动以变量传递


基于用户登陆认证:
  1. /配置语法
  2. Syntax: auth_basic string| off;
  3. Default:    auth_basic off;
  4. Context:    http, server, location, limit_except
  5. //用户密码记录配置文件
  6. Syntax: auth_basic_user_file file;
  7. Default:    -
  8. Context:    http, server, location, limit_except


  9. //需要安装依赖组件
  10. [root@xuliangwei ~]# yum install httpd-tools
  11. [root@xuliangwei ~]# htpasswd -c /etc/nginx/auth_conf xuliangwei

  12. //可在http,server,location下添加如下信息
  13. auth_basic "Auth access Blog Input your Passwd!";
  14. auth_basic_user_file /etc/nginx/auth_conf;
复制代码
用户认证局限性
1.用户信息依赖文件方式
2.操作管理机械,效率低下

解决办法
1.Nginx结合LUA实现高效验证
2.Nginx结合LDAP, 利用nginx-auth-ldap模块
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|众客华禹 ( 蜀ICP备2021016660号 )

GMT+8, 2022-5-17 09:32 , Processed in 0.047939 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表