• nginx命令和配置


    centos 6.8安装的nginx 1.12.2

    1、nginx常用的命令

      使用nginx命令前,进入到/usr/local/nginx/sbin/目录

      1)查看nginx版本

        进入到/usr/local/nginx/sbin/目录, 执行./nginx -v

      2)启动

        进入到/usr/local/nginx/sbin/目录, 执行./nginx

      3)关闭

        进入到/usr/local/nginx/sbin/目录, 执行./nginx -s stop

      4)检查配置文件是否有语法问题

      5)重新加载

        进入到/usr/local/nginx/sbin/目录, 执行./nginx -s reload

    2、配置文件介绍

      /usr/local/nginx/nginx.conf

       第一部分:全局块

      从配置文件开始到events块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行nginx服务器的用户(组)、允许生成的worker process数、进程PID存放路径、日志存放路径和类型以及配置文件的引入等。

      "worker_processes 1; "是nginx服务器并发处理服务的关键配置,worker_processes值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。

      第二部分:events块

      events块涉及的指令主要影响nginx服务器与用户的网络连接,常用的设置包括是否开启对多work process下网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个work process可以同时支持的最大连接数等。

      "worker_connections 1024;" 支持的最大连接数为1024

       第三部分:http块

    3、反向代理和负载均衡

      应该有一个nginx服务器有多个应用服务器(可以是tomcat),可以使用一台虚拟机,安装一个nginx,多个tomcat,来模拟。

      nginx的配置文件:

    upstream tomcats{
        server 192.168.25.148:8080;
        server 192.168.25.148:8081;
    }
    
    server {
        listen       80;
        server_name  tomcat.test.com;
        location / {
            proxy_pass   http://tomcats;
            index  index.html index.htm;
        }
    }

      负载均衡: 只需要在upstream的server后面添加一个weight即可代表权重。权重越高,分配请求的数量就越多。默认权重是1。

    upstream tomcats{
        server 192.168.25.148:8080 weight=2;
        server 192.168.25.148:8081;
    }
    
    server {
        listen       80;
        server_name  tomcat.test.com;
        location / {
            proxy_pass   http://tomcats;
            index  index.html index.htm;
        }
    }

    ————————————————————————————————

    下面内容转载自:Nginx详细教程
    版权声明:本文为CSDN博主「今夕何年-」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/panleiaiying/article/details/85485389

    一、一个简单的Demo

    worker_processes  1;  # 设置多少个进程,与cup核保持一致最好
    events {
        worker_connections  1024; # 每个进程允许的最大连接数
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        server
        {
            listen  8080;
            server_name  localhost;
            location / {
                root    D:/STUDY;   # 当输入[server_name]:[listen] 时会进入这个目录
                index   a.html;  # 默认界面
            }
            error_page 404 /error.html; #根据错误码跳转到error 界面
        }
    } 

    当在浏览器中输入[server_name]:[listen] (也就是localhost:8080)时,会在location 下的root对应的文件夹中找index 对应的界面(也就是a.html);

    每次修改完conf 文件,可以用以下指令校验conf 配置是否合法

    nginx -t -c "/etc/nginx/nginx.conf"   #校验文件合法

    location的配置规则:

    语法规则: location [=||*|^~] /uri/ { … }

    1)= 开头表示精确匹配
    2)^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
    3)~ 开头表示区分大小写的正则匹配
    4)~* 开头表示不区分大小写的正则匹配
    5)!和!*分别为区分大小写不匹配及不区分大小写不匹配 的正则
    6)/ 通用匹配,任何请求都会匹配到。
    7)多个location配置的情况下匹配顺序为
    首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求

    二、 Nginx 日志

    在nginx 中使用日志,可以添加以下代码:
    在这里插入图片描述
    主要说一下log_format (日志的格式化):

    '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"'

    log_fomat 为日志输出格式
    remote_addr: 客户端地址
    remote_user:认证的用户名,没有开启不会显示
    time_local : nginx 服务器时间
    request : request头的请求行(里面包含服务器的地址后半部分)
    status : 状态码
    body_bytes_sent : 服务端响应给客户端的body信息大小
    http_referer : 上一级url 的地址
    http_user_agent: 客户端使用代理(比如使用什么访问的)
    http_x_forwarded_for : 每一级请求所携带的http 信息

    下面为一段输出的日志,可以跟上述的format 对比一下

    127.0.0.1 - - [30/Dec/2018:14:02:03 +0800] "GET /aa HTTP/1.1" 404 51 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" "-"
    127.0.0.1 - - [30/Dec/2018:14:11:31 +0800] "GET /aa HTTP/1.1" 404 51 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" "-"

     三、Nginx Modules (模块)

    当我们输入nginx -V 时,会输出很多参数, 这些参数中就有很多以with-******_module格式的参数, 这些参数为nginx 的功能模块,我们说一下基础的模块:

    1、 --with-http_stub_status_module (查看nginx 客户端连接状态)

    配置语法:

    Syntax:    stub_status;
    Default:    —
    Context:    server, location

    配置方式

    location /mystatus{
       stub_status;
    }

    浏览器请求
    在这里插入图片描述
    当前活跃的连接数
    接受 处理 总连接
    读 写 等待

    2、 --with-http_random_index_module (随机选择一个文件做主页)

    语法:

    Syntax:    index file ...;
    Default:    
    index index.html;
    Context:    http, server, location

    在这里插入图片描述
    会在指定目录下随机选择主页

    3、 --with-http_sub_module (http内容替换)
    语法:

    Syntax:    sub_filter string replacement;
    Default:    —
    Context:    http, server, location

    demo:

    location / {
        sub_filter '<a href="http://127.0.0.1:8080/'  '<a href="https://$host/';
        sub_filter '<img src="http://127.0.0.1:8080/' '<img src="https://$host/';
        sub_filter_once on;
    }
    sub_filter 'other' 'haochen';  #只替换一个字符
    # 如果替换多个字符,就添加一段代码
    sub_filter_once off  #关闭扣替换所有字符

    4、 连接限制和请求限制

    语法

    Syntax:    limit_conn_zone key zone=name:size;
    Default:    —
    Context:    http
    
    Syntax:    limit_conn zone number;
    Default:    —
    Context:    http, server, location
    Syntax:    limit_req_zone key zone=name:size rate=rate [sync];
    Default:    —
    Context:    http
    
    Syntax:    limit_req zone=name [burst=number] [nodelay | delay=number];
    Default:    —
    Context:    http, server, location

    限制请求的条数:

    limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s;
    #location 下
    limit_req zone=req_zone burst=3 nodelay;

    上述表示 每秒执行一条请求, 三条作为缓存,其他的限制执行

    连接限制:

    limit_conn_zone $binary_remote_addr zone=conn_zone:1m
    #location 、server
    limit_conn conn_zone 1;

    上述表示一个同一时刻只能有一个连接过来

    压力测试工具安装:

    yum install httpd-tool  
    ab -n 20 -c 20 www.baidu.com  // 请求总数20  并发20

    更多介绍查看官网文档 http://nginx.org/en/docs/

    5、访问控制

    配置语法:

    Syntax:    allow address | CIDR | unix: | all;
    Default:    —
    Context:    http, server, location, limit_except
    
    Syntax:    deny address | CIDR | unix: | all;
    Default:    —
    Context:    http, server, location, limit_except

    demo

    location / {
        deny  192.168.1.1;
        allow 192.168.1.0/24;
        allow 10.1.1.0/16;
        allow 2001:0db8::/32;
        deny  all;
    }

    6、 http_auth_basic_module(用户登录认证)

    对客户端的请求进行登录验证

    配置语法:

    Syntax:    auth_basic string | off;
    Default:    
    auth_basic off;
    Context:    http, server, location, limit_except
    
    Syntax:    auth_basic_user_file file;
    Default:    —
    Context:    http, server, location, limit_except

    首先要生成一个保存用户名和密码的配置文件,可以使用htpassword 加密:

    htpasswd -c auth.conf panlei

    nginx.conf 中配置

    location / {
        auth_basic           "closed site";
        auth_basic_user_file conf/auth.conf;
    }

    访问效果
    在这里插入图片描述

    四、各种使用场景

    1、 静态资源

    语法: tcp_nopush on | off;
    默认值: tcp_nopush off;
    上下文: http, server, location

    选项仅在使用sendfile的时候才开启
    结果就是数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵塞。

    语法: tcp_nodelay on | off;
    默认值:  tcp_nodelay on;
    上下文: http, server, location

    提高网络的实时性

    语法:    gzip on | off;
    默认值:    gzip off;
    上下文:    http, server, location, if in location

    压缩运输

    各项参数
    gzip_comp_level 1;  # 压缩比例
    gzip_http_version 1.1  #压缩版本
    gzip_types text/html  #文件格式

    2、 代理

    语法:    proxy_pass URL;
    Default:    —
    上下文:    location, if in location, limit_except

    一个简单的demo:

    server {
        listen       80;
        server_name  192.168.136.130;
        location ~ /login$ {
           proxy_pass http://192.168.1.116:8081;
        }
    }

    访问130/login 会被转发到116:8081/login

    使用代理经常用的属性:

    proxy_redirect default;
    
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    
    proxy_connect_timeout 30;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
    
    proxy_buffer_size 32k;
    proxy_buffering on;
    proxy_buffers 4 128k;
    proxy_busy_buffers_size 256k;
    proxy_max_temp_file_size 256k;

    如果只让特定ip 访问:

    # 仅允许116.62.103.228 访问
     location / {
         if ( $http_x_forwarded_for !~* "^116.62.103.228") {
             return 403;
         }
         root   /opt/app/code;
         index  index.html index.htm;
     }

    3、负载均衡

    语法: upstream name {} ,多配制在http 层。

    demo:

    upstream pl{
            server 192.168.1.251:8080 down;
            server 192.168.1.252:8080 backup;
            server 192.168.1.253:8080 max_fails=1 fail_timeout=10s;
        }
    server {
        listen       80;
        server_name  192.168.1.254;
        location / {
            proxy_pass http://pl;
        }
    }

    其中每个后缀的的作用:

    nginx 负载均衡默认是轮询的规则,
    nginx 还有以下的轮询策略:

    ip_hash 配置时,只需要在upstream 中添加关键字 ip_hash 就可以
    hash 配置同上, 例如 hash $request_uri

    ————————————————————————————————
    版权声明:本文为CSDN博主「今夕何年-」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/panleiaiying/article/details/85485389

  • 相关阅读:
    知社 —— 第 4 次站立式会议(04-28)
    知社 —— 第 3 次站立式会议(04-27)
    知社 —— 第 2 次站立式会议(04-26)
    知社 —— 第 1 次站立式会议(04-25)
    团队代码规范、冲刺任务与计划
    团队作业第四次 — 项目系统设计与数据库设计
    团队作业第三次 — 项目需求分析
    第01组 Alpha冲刺(5/6)
    2019 SDN上机第4次作业
    2019 SDN阅读作业
  • 原文地址:https://www.cnblogs.com/xy-ouyang/p/11846446.html
Copyright © 2020-2023  润新知