• nginx学习资料整理一


    一、安装运行

    1.1、安装环境支撑

    1、gcc 环境,一般情况linux 系统自带该环境,也可自行下载安装使用新版本;

    2、pcre 环境,一般需自行安装,其是一个perl库,包含正则表达式等功能,http模块使用pcre来解析正则表达式配置的URI匹配规则;

    3、zlib环境,一般需要自行安装,免费的无损数据压缩库;nginx 使用 zlib http 包的内容进行 gzip 压缩;

    4、openssl环境,一般需要自行安装,安全套接字层密码库,用于支持sslhttps协议;  

    1.2、环境安装

    1、gcc环境检测

       目前使用centos 系统,装在virtualBox中,可使用命令检测是否安装gcc环境,如下:

       命令:gcc -v

      若未安装,请自行百度安装 

    2、安装pcre环境

    a、下载pcre 包,目前使用是 pcre-8.13.tar.gz 

    a、解压包到指定目录

    命令: tar -zxvf pcre-8.13.tar.gz

    b、配置pcre ,先进入解压后的目录,再执行以下命令

    命令: ./configure --prefix=安装目录

    c、编译pcre 包,在解压后的目录下,执行

    命令:make

    d、安装pcre环境 ,在解压后的目录下,执行

    命令:make install

    e、验证pcre环境,安装是否成功

       命令: ./pcre-config --version 

      3、安装zlib

    下载zlib包,官网:http://www.zlib.net/ ,目前使用 zlib-1.2.11.tar.gz 

    3、解压包到指定目录

    命令: tar -zxvf zlib-1.2.11.tar.gz

    c、配置zlib,并指定utf-8编码,先进入解压后的目录,再执行以下命令

    命令: ./configure --prefix=安装目录

    d、编译zlib包,在解压后的目录下,执行

    命令:make

    e、安装zlib环境 ,在解压后的目录下,执行

    命令:make install

    4、安装openssl 环境

    a、下载openssl 包,官网:https://www.openssl.org/source/ ,目前使用 openssl-1.0.2j.tar.gz 

    解压包到指定目录

    命令: tar -zxvf openssl-1.0.2j.tar.gz

    c配置openssl,先进入解压后的目录,再执行以下命令

    命令: ./config --prefix=安装目录

    d编译openssl包,在解压后的目录下,执行

    命令:make

    e安装openssl环境 ,在解压后的目录下,执行

    命令:make install

    1.3、安装nginx

    1、下载nginx安装包,https://nginx.org/download/ ,目前使用nginx-1.9.9.tar.gz 

    2、解压包到指定目录

    命令: tar -zxvf nginx-1.9.9.tar.gz

    3、配置nginx,先进入解压后的目录,再执行以下命令  

       ./configure --prefix=/opt/nginx/install/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-pcre=/opt/pcre/pcre-8.13 --with-openssl=/opt/openssl/openssl-1.0.2j  --with-zlib=/opt/zlib/zlib-1.2.11

       注:--prefix=安装目录  

           --with-pcre=安装的pcre目录

           --with-openssl=安装的openssl目录

           --with-zlib=安装的zlib目录

           --with-http_ssl_module : 使用https协议模块。默认情况下,该模块没有被构建。前提是opensslopenssl-devel已安装

           --with-http_stub_status_module : 用来监控 Nginx 的当前状态

           --with-http_realip_module : 通过这个模块允许我们改变客户端请求头中客户端IP地址值(例如X-Real-IP X-Forwarded-For),意义在于能够使得后台服务器记录原始客户端的IP地址

           --add-module=PATH : 添加第三方外部模块,如nginx-sticky-module-ng或缓存模块。每次添加新的模块都要重新编译(Tengine可以在新加入module时无需重新编译)

           --with-http_gzip_static_modulegzip 压缩相关

    4、编译nginx包,在解压后的目录下,执行 

    命令:make

    5、安装nginx环境 ,在解压后的目录下,执行

    命令:make install

    6、验证安装是否成功,进入配置的安装路径,执行以下命令:

      

    注:syntax is ok ,test is successful 表示安装成功 

    1.4、运行nginx

    1、启动nginx,命令:./sbin/nginx ,如下

     2、访问首页,如下: 

    1.5、虚拟机相关设置

        查看访火墙的状态: systemctl status firewalld

     启动访火墙:systemctl start firewalld 

     启用访火墙区域端口和协议组合:firewall-cmd --zone=public --add-port=8080/tcp --permanent  

     插入访火墙接入访问ip表端口:/sbin/iptables -I INPUT -p tcp --dport 8088 -j ACCEPT

       nohup java -jar upstream-0.0.1-SNAPSHOT.jar --server.port=8888 >/dev/null 2>&1 & 

    二、nginx基本情况

    2.1、基本命令

           启动     ./sbin/nginx

           停止     ./sbin/nginx -s stop

           重启 ./sbin/nginx -s reload

           查看进程 ps -ef|grep nginx

    2.2、目录结构

            ./nginx 安装目录:

          ./conf 配置文件目录: 

      ./sbin 命令bin目录:

     ./html 默认web目录:

      ./logs 日志文件目录:

    2.3、默认配置

             ./nginx/conf/nginx.conf 文件:

    1、配置nginx 开机启动,以centos 为例:

    a、切换到/usr/lib/systemd/system/目录,创建nginx.service文件

           vi nginx.service

    b、写入以下文件,注意修改目录

    [Unit]
    
    Description=nginx
    
    After=network.target    
    [Service]
    Type=forking
    ExecStart=/opt/nginx/install/nginx/sbin/nginx
    ExecReload=/opt/nginx/install/nginx/sbin/nginx -s reload
    ExecStop=/opt/nginx/install/nginx/sbin/nginx quit
    PrivateTmp=true    
    [Install]
    WantedBy=multi-user.target

    c、设为开机启动

    systemctl enable nginx.service

    d、查看状态  

    systemctl status nginx.service

       重启机器自动运行后的状态: 

     

     注:nginx 启动后分为master进程与worker进程,worker进程处理对外请求,master不处理对外请求,管理worker进程 

    三、nginx 配置

    3.1、全局配置

         1user 配置,用于指定nginx worker进程的用户、用户组,可对nginx 进程权限控制

            如:user root root ,指定root 用户,root  用户组运行 

    2、worker_processes 配置,用于指定nginx进程数,默认为1

            如:worker_processes 2;

    3、pid 配置,用于指定进程id存储文件

            如:pid   logs/nginx.pid;

    4、error_log 配置,用于指定全局模块错误日志

       语法:error_log file [ debug | info | notice | warn | error | crit ]

         如:error_log  logs/error.log  info;

    5、include配置,用于指定需包含的配置文件

         如:include vhosts/*.conf; 

      6、其他全局配置,请参考官方文档

           https://www.nginx.cn/doc/core/mainmodule.html  

    3.2events 模块

         配置nginx服务器与用户的网络连接参数,主要是配置每个进程的最大连接数,使用哪种事件驱动模型处理请求;是否允许同时接受多个网路连接,开启多个网络连接序列化等。

         示例:

    events {
    
        accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
    
        multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
    
        use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    
        worker_connections 1024; # 最大连接数
    
        client_header_buffer_size 4k;
    
        open_file_cache max=2000 inactive=60s;
    
        open_file_cache_valid 60s;
    
        open_file_cache_min_uses 1
    
    } 

     1、accept_mutex 配置,设置网路连接序列化,防止惊群现象发生,默认为on 

     2、multi_accept 配置,设置一个进程是否同时接受多个网络连接,默认为off 

     3、worker_connections配置,配置一个进程的最大连接数,默认与系统有关,一般为1024,最大不能超过系统连接数,

           如:worker_connections  1024

           客户端最大连接数(理论值):worker_processes * worker_connections  

           反向代理后最大连接数:worker_processes * worker_connections/4 

       4worker_rlimit_nofile配置,指定一个nginx进程最多打开文件数,配置成与linux内核数一致,可使用ulimit -n 查看系统数

       如:worker_rlimit_nofile65536 

     5、事件驱动模型配置,Nginx服务器提供了多个事件驱动器模型来处理网络消息。其支持的类型有:selectpollkqueueepollrtsing/dev/poll以及eventport

     * select:只能在Windows下使用,这个事件模型不建议在高负载的系统使用

    * poll:Nginx默认首选,但不是在所有系统下都可用

    * kqueue:这种方式在FreeBSD 4.1+, OpenBSD2.9+, NetBSD 2.0, MacOS X系统中是最高效的

    * epoll: 这种方式是在Linux 2.6+内核中最高效的方式

    * rtsig:实时信号,可用在Linux 2.2.19的内核中,但不适用在高流量的系统中

    * /dev/poll: Solaris 7 11/99+,HP/UX 11.22+, IRIX 6.5.15+, and Tru64 UNIX 5.1A+操作系统最高效的方式

    * eventport: Solaris 10最高效的方式 

    注:若未配置该项,nginx则会选择适合系统的配置,一般poll ,但在linux 高版本中建议选择epoll ;

    6、其他相关配置,请参考官方文档

        https://www.nginx.cn/doc/core/events.html  

    3.3HTTP 模块

    可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

    3.3.1http core 核心模块

       1default_type 配置,设置默认类型,默认值为text/plain

         如:default_type  application/octet-stream;  

      2sendfile配置,指定是否使用sendfile系统调用来传输文件,默认为offsendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝。

      如:sendfile        on; 

      3、keepalive_timeout配置,连接超时时间,默认值为75 ,

              如:keepalive_timeout 75s ; 

      4、tcp_nopush配置,使用sendfile 时,设置tcp_nopush 用于解决阻塞,与tcp_nodelay互斥;

     如:tcp_nopush on ;

      5、其他相关配置 (来源于网上)     

    include mime.types; #主模块指令,实现对配置文件所包含的文件设定,可以减少主配置文件的复杂度,类似apache中的include方法。

    default_type application/octet-stream;  #属于http核心模块指令,这里默认类型为二进制流,也就是当文件类型未定义是使用这种方式,例如在没有配置php环境时,nginx是不予解析的,此时,用浏览器访问php文件就会出现下载窗口

    charset utf-8;  #默认编码

    server_names_hash_bucket_size 128;  #服务器名字的hash表大小

    proxy_headers_hash_max_size 51200;  #设置头部哈希表的最大值,不能小于你后端服务器设置的头部总数

    proxy_headers_hash_bucket_size 6400; #设置头部哈希表大小

    client_header_buffer_size 32k; #用于指定来自客户端请求头headerbuffer大小,对于大多数请求,1KB的缓冲区大小已经足够,如果自定义了消息头或有更大的cookie,可以增加缓冲区大小。这里设置为32KB

    large_client_header_buffers 4 128k; #用来指定客户端请求中较大的消息头的缓存最大数量和大小,“4”为个数,“128”为大小,最大缓存为4128KB

    sendfile on; #开启高效文件传输模式,将tcp_nopushtcp_nodely两个指令设置为on,用于防止网络阻塞。

    autoindex on;  #开启目录列表访问,合适下载服务器,默认关闭。

    tcp_nopush on; #防止网络阻塞

    tcp_nodelay on;  #防止网络阻塞

    keepalive_timeout 120;  #用于设置客户端连接保持活动的超时时间,在超过这个时间之后服务器会关闭该链接。

    client_header_timeout 3m #用于设置客户端请求读取超时时间,如果超过这个时间,客户端没有发送任何数据,nginx将返回“request time out (408)”错误。

    client_body_timeout 3m; #用于设置客户端请求主体读取超时时间,默认值为60.如果超过这个时间,客户端还没有发送任何数据,nginx将返回“Request time out(408)”

    server_tokens off; #修改或隐藏Nginx的版本号

    client_body_buffer_size 256k; # 缓冲区代理缓冲用户端请求的最大字节数

    send_timeout 3m;  #服务器超时设置

    #FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。

    fastcgi_connect_timeout 300; #指定连接到后端fastCGI的超时时间

    fastcgi_send_timeout 300;     #fastCGI请求的超时时间,这个值是指已经完成两次握手后向fastCGI传送的超时时间

    fastcgi_read_timeout 300;     #接收fastCGI应答的超时时间,这个值已经完成两次握手后接收fastCGI应答的超时时间

    fastcgi_buffer_size 64k;     #指定读取fastCGI应答第一部分需要用多大的缓冲区,一般第一部分应答不会超过1k,一般设置为64k

    fastcgi_buffers 4 64k;         #指定本地需要用多少和多大的缓冲区来缓冲fastCGI的应答

    fastcgi_busy_buffers_size 128k;     #默认值是fastcgi_buffers的两倍

    fastcgi_temp_file_write_size 128k;     #在写入fastcgi_temp_path是用多大的数据块,默认值是fastcgi_buffers两倍

    #gzip模块设置

    gzip on; #开启  #gzip压缩输出

    gzip_min_length 1k; #用于设置允许压缩的页面最小字节数,页面字节数从header头的content-length中获取,默认值是0

    不管页面多大都进行压缩,建议设置成大于1k的字节数,小于1k可能会越压越大最小压缩文件大小

    gzip_buffers 4 16k; #表示申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果

    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压缩的页面,例如,用squid缓存经过nginx压缩的数据。

    limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用

    6、参考官网

    https://www.nginx.cn/doc/standard/httpcore.html 

    3.4、日志配置

    1log_format 配置,用于指定nginx输出日志格式

        语法: log_format name format [format ...]

        如:

        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                          '$status $body_bytes_sent "$http_referer" '

                          '"$http_user_agent" "$http_x_forwarded_for"';

        

    参数

    说明

    示例

    $remote_addr

    客户端地址

    219.227.111.255

    $remote_user

    客户端用户名称

    $time_local

    访问时间和时区

    18/Jul/2014:17:00:01 +0800

    $request

    请求的URIHTTP协议

    “GET /article-10000.html HTTP/1.1”

    $http_host

    请求地址,即浏览器中你输入的地址(IP或域名)

    www.ha97.com

    198.98.120.87

    $status

    HTTP请求状态

    200

    $upstream_status

    upstream状态

    200

    $body_bytes_sent

    发送给客户端文件内容大小

    1547

    $http_referer

    url跳转来源

    https://www.google.com/

    $http_user_agent

    用户终端浏览器等信息

    “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C;

    $ssl_protocol

    SSL协议版本

    TLSv1

    $ssl_cipher

    交换数据中的算法

    RC4-SHA

    $upstream_addr

    后台upstream的地址,即真正提供服务的主机地址

    10.36.10.80:80

    $request_time

    整个请求的总时间

    0.165

    $upstream_response_time

    请求过程中,upstream响应时间

    0.002

      2、access_log配置,指令日志文件存放路径 ,

      如:access_log  logs/access.log  main; 

     3.5server 配置模块

         配置虚拟主机的相关参数,一个http中可以有多个server

         #虚拟主机的配置

    server
    
    {
    
    #listen指定虚拟主机服务器端口
    
    Listen  80;
    
    #server_name用来指定ip地址或者域名,多个域名之间用空格分开
    
    server_name www.ha97.com ha97.com;
    
    #index用于设定访问的默认首页地址
    
    Index  index.html index.htm index.php;
    
    #root指令用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以使绝对路径
    
    root /data/www/ha97;
    
    #charser用于设置网页的默认编码格式
    
    Charest  gb2312;
    
    #access_log用来指定此虚拟机的访问日志存放路径
    
    access_log /data/logs/nginx/goods.access.log;
    
    #error_log 用来指定此虚拟机的错误日志存放路径
    
    error_log /data/logs/nginx/goods.error.log;
    
    #配置请求的路由,以及各种页面的处理情况。
    
    location / {
    
                root   html;
    
                index  index.html index.htm;
    
     }
    }

     3.6upstream 配置模块

         用于负载均衡配置

      upstream demo.com {
    
    least_conn; #调度算法
    
    server 192.168.137.3:8888;
    
    server 192.168.137.3:8881;
    
    server 192.168.137.3:8881 backup;
    
    }

     nginx的负载均衡支持4种调度算法:

    轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统自动剔除,使用户访问不受影响,

    weight  指定轮询权值,weight值越大,分配到的访问几率越高,主要用于后端每个服务器性能不均的情况下

    ip_hash 每个请求按访问iphash结果分配,这样来自同一个ip的访客固定访问一个后端服务器,有效解决动态网页

    存在的session共享问题

    fair  比上面连个更加智能的算法,此种算法可以依据页面大小和加载时间长短智能的进行负载均衡,也就是根据后端服务器的

    响应时间来分配请求,响应时间短的优先分配,nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载nginxupstream_fair模块

    url_hash 此方法按访问的urlhash结果来分配请求,是每个url定向到同一个后端服务器,可以进一步提高后端缓存

    服务器的效率,nginx本身是不支持url_hash,如果需要使用这种调度算法,必须安装nginxhash软件包

    http upstream模块中,可以通过server指令指定后端服务器的ip地址和端口,同时还可以设定每个后端服务器在

    负载均衡调度中的状态,常用的几种状态有:

    down  表示当前的server暂时不参与负载均衡

    backup 预留的备份机器,当其他所有的非backup机器出现故障或者忙的时候才会请求backup机器,因此这台机器的压力最轻

    max_fails 允许请求失败的次数,默认为1,当超过最大次数时,返回proxy_next_upstream模块定义的错误

    fail_timeout 在经历了max_fails此失败后,暂停服务的时间,max_fails可以和fail_timeout一起使用

    3.7location 区段

    用于反向代理不同服务器,参考官网:

    https://www.nginx.cn/doc/standard/httpproxy.html 

       基本语法如下:location [=|~|~*|^~|@] pattern{……}

       示例:

         location / {
    
    proxy_pass        http://localhost:8000;
    
    proxy_set_header  X-Real-IP  $remote_addr;
    
    }

     1、相关解析:

    location / {
    
    proxy_pass http://127.0.0.1:88;
    
    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服务器传
    
    }

     2、优先级

    1:带有“=“的精确匹配优先

    2:没有修饰符的精确匹配

    3:正则表达式按照他们在配置文件中定义的顺序

    4:带有“^~”修饰符的,开头匹配

    5:带有“~” “~*” 修饰符的,如果正则表达式与URI匹配

    6:没有修饰符的,如果指定字符串与URI开头匹配

  • 相关阅读:
    LODOP在页面不同位置输出页眉页脚
    【gridview增删改查】数据库查询后lodop打印
    LODOP中平铺图片 文本项Repeat
    Lodop设置文本项行间距、字间距
    Lodop打印条码二维码的一些设置
    LODOOP中的各种边距 打印项、整体偏移、可打区域、内部边距
    Lodop设置打印维护返回打印语句代码
    Lodop导出图片,导出单页内容的图片
    Lodop如何设置预览后导出带背景的图,打印不带背景图
    Lodop打印语句最基本结构介绍(什么是一个任务)
  • 原文地址:https://www.cnblogs.com/xin_ny/p/12864611.html
Copyright © 2020-2023  润新知