美文网首页
Centos 7.5 下安装 Nginx 1.20.1

Centos 7.5 下安装 Nginx 1.20.1

作者: 轻飘飘D | 来源:发表于2021-07-03 01:20 被阅读0次

    1.安装补充工作

    yum -y install epel-release
    yum -y install net-tools wget nscd lsof
    
    

    2.DNS缓存

    # 编辑/ etc/ resolv. conf 配置 DNS 服务器, 
    # 打开 NSCD 服务, 缓存 DNS, 提高 域名 解析 响应 速度。
    [root@xag132 src]# cat /etc/resolv.conf
    # Generated by NetworkManager
    nameserver 8.8.8.8
    nameserver 8.8.4.4
    
    #启动 NSCD 服务
    [root@xag132 src]# systemctl start nscd.service
    [root@xag132 src]# systemctl enable nscd.service
    
    
    1. 下载稳定版(版本号中间20为偶数表示稳定版)
    [root@xag132 src]# 
    wget http://nginx.org/download/nginx-1.20.1.tar.gz
    
    #解压安装包
    [root@xag132 src]# tar zxmf nginx-1.20.1.tar.gz
    [root@xag132 src]# cd nginx-1.20.1
    
    [root@xag132 nginx-1.20.1]# ./configure --help
    
      --help                             print this message
      --prefix=PATH                      set installation prefix
     。。。
      --with-debug                       enable debug logging
    
    

    4.安装编译工具依赖库

    yum -y install gcc pcre-devel zlib-devel openssl-devel libxml2-devel
    yum -y install libxslt-devel gd-devel GeoIP-devel jemalloc-devel
    yum -y install libatomic_ops-devel perl-devel perl-ExtUtils-Embed
    
    [root@xag132 nginx-1.20.1]# groupadd nginx
    [root@xag132 nginx-1.20.1]# useradd nginx -g nginx -s /sbin/nologin -M
    

    5.编译安装

    [root@xag132 nginx-1.20.1]#
    ./configure --prefix=/usr/local/nginx \
     --user=nginx \
     --group=nginx \
     --with-threads \
     --with-file-aio \
     --with-http_ssl_module \
     --with-http_v2_module \
     --with-http_realip_module \
     --with-http_addition_module \
     --with-http_xslt_module=dynamic \
     --with-http_image_filter_module=dynamic \
     --with-http_geoip_module=dynamic \
     --with-http_sub_module \
     --with-http_dav_module \
     --with-http_flv_module \
     --with-http_mp4_module \
     --with-http_gunzip_module \
     --with-http_gzip_static_module \
     --with-http_auth_request_module \
     --with-http_random_index_module \
     --with-http_secure_link_module \
     --with-http_degradation_module \
     --with-http_slice_module \
     --with-http_stub_status_module \
     --with-stream=dynamic \
     --with-stream_ssl_module \
     --with-stream_realip_module \
     --with-stream_geoip_module=dynamic \
     --with-stream_ssl_preread_module \
     --with-compat \
     --with-pcre-jit 
    
    [root@xag132 nginx-1.20.1]#
    make && make install
    
    

    6.环境 配置

    cat >/etc/profile  << EOF
    PATH=$PATH:/usr/local/nginx/sbin
    EOF
    
    source /etc/profile
    
    #检查
    [root@xag132 nginx-1.20.1]# nginx -t 
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    
    [root@xag132 nginx-1.20.1]# nginx -v
    nginx version: nginx/1.20.1
    
    

    7.解决中文注解乱码问题

    [root@xag132 run]# locale -a |grep "zh_CN"
    zh_CN
    zh_CN.gb18030
    zh_CN.gb2312
    zh_CN.gbk
    zh_CN.utf8
    
    [root@xag132 run]# vim /etc/locale.conf
    [root@xag132 run]# cat /etc/locale.conf
    #LANG="en_US.UTF-8"
    LANG="zh_CN"
    [root@xag132 run]# source  /etc/locale.conf
    
    [解决CentOS7 VIM显示中文乱码的问题]
    使用vim的时候有中文乱码,问题出在vim上,对于CentOS应该修改/etc/vimrc文件,在该文件头上添加下面四行代码
    ----------------------------------------------------
    set fileencodings=utf-8,gb2312,gbk,gb18030  
    set termencoding=utf-8  
    set fileformats=unix  
    set encoding=prc 
    

    8.注册系统服务

    [root@xag132 run]# cat /usr/lib/systemd/system/nginx.service
    [Unit]                          # 记录service文件的通用信息
    Description= The Nginx HTTP and reverse proxy server    # Nginx 服务描述信息
    After=network.target remote-fs.target nss-lookup.target # Nginx 服务启动依赖,在指定服务之后启动
    
    [Service]                       # 记录service文件的service 信息 
    Type=forking                        # 标准UNIX Daemon 使用的启动方式
    PIDFile=/usr/local/nginx/logs/nginx.pid                     # Nginx服务的 pid 文件位置
    ExecStartPre=/usr/bin/rm -f /usr/local/nginx/logs/nginx.pid         # Nginx服务启动前删除旧的 pid 文件
    ExecStartPre=/usr/local/nginx/sbin/nginx -t -q      # Nginx服务启动前执行配置文件 检测
    ExecStart=/usr/local/nginx/sbin/nginx -g "pid /usr/local/nginx/logs/nginx.pid;"         # 启动Nginx 服务
    ExecReload=/usr/local/nginx/sbin/nginx -t -q                # Nginx 服务重启前执行配置文件 检测
    ExecReload=/usr/local/nginx/sbin/nginx -s reload -g "pid /usr/local/nginx/logs/nginx.pid;"  # 重启 Nginx 服务
    ExecStop=/bin/kill -s HUP $ MAINPID                     # 关闭 Nginx 服务
    KillSignal=SIGQUIT TimeoutStopSec=5 KillMode=process PrivateTmp=true
    
    [Install]                               # 记录 service 文件的安装信息
    WantedBy=multi-user.target                      # 多用户环境下启用
    
    [root@xag132 run]# cat /usr/lib/systemd/system/nginx.service
    [Unit]
    Description= The Nginx HTTP and reverse proxy server
    After=network.target remote-fs.target nss-lookup.target
    
    [Service] 
    Type=forking
    PDFile=/usr/local/nginx/logs/nginx.pid
    ExecStartPre=/usr/bin/rm -f /usr/local/nginx/logs/nginx.pid
    ExecStartPre=/usr/local/nginx/sbin/nginx -t -q
    ExecStart=/usr/local/nginx/sbin/nginx -g "pid /usr/local/nginx/logs/nginx.pid;"
    ExecReload=/usr/local/nginx/sbin/nginx -t -q
    ExecReload=/usr/local/nginx/sbin/nginx -s reload -g "pid /usr/local/nginx/logs/nginx.pid;"
    ExecStop=/bin/kill -s HUP $ MAINPID
    KillSignal=SIGQUIT TimeoutStopSec=5 KillMode=process PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    
    systemctl enable nginx  # 将 Nginx 服务 注册 为 系统 启动 后 自动 启动 
    systemctl start nginx   # 启动 Nginx 服务 命令 
    systemctl reload nginx  # reload Nginx 服务 命令 
    systemctl stop nginx    # stop Nginx 服务 命令 
    systemctl status nginx  # 查看 Nginx 服务 运行 状态 命令
    

    9.1配置 [root@xag132 conf]# cat nginx.conf

    daemon on;               #以守护进程的方式运行 Nginx 
    #pid logs/nginx.pid;     #主进程 ID 记录 在 logs/nginx.pid中(和 8.注册系统服务中重复) 
    user nginx nginx;        #工作进程 运行用户为 nginx
    
    #Nginx 根据 CPU 的 内核 数 生成 等 数量 的 工作 进程。
    worker_processes auto;
    #工作进程 CPU 绑定指令
    worker_cpu_affinity auto;
    # 错误 日志 输出 级别 为 warn
    error_log logs/nginx_error.log warn; 
    #默认情况下包括一个32个线程的线程池,长度为65536的请求队列
    thread_pool default threads=32 max_queue=65536;
    #aio threads=default;
    #启用 pcre_ jit 技术
    pcre_jit on; 
    
    # 定时器 周期 为 100 毫秒
    timer_resolution 100ms;
    #工作 进程 系统 优先级 为- 5
    worker_priority -5;
    #所有 工作 进程 的 最大 连接 数 是 65535
    worker_rlimit_nofile 65535;
    #工作 进程 关闭 等待 时间 是 10 秒
    worker_shutdown_timeout 10s;
    # 互斥 锁 文件 的 位置 是 logs/ nginx.lock
    lock_file logs/nginx.lock;
    # 工作 进程 工作 目录 是 logs
    ##working_directory logs
    # 调试 点 模式 为stop 
    debug_points stop;  
    # 崩溃 文件 大小 为 800MB
    worker_rlimit_core 800m; 
    
    events 
    {
    #每个 工作 进程 的 最大 连接 数 是 65535
    worker_connections 65535; 
    #指定 事件 模型 为 epoll
    use epoll; 
    #启用 互斥 锁 模式 的 进程 调度
    accept_mutex on; 
    #互斥 锁 模式 下 进程 等待 时间 为 300 毫秒
    accept_mutex_delay 300ms; 
    #启用 支持 多 连接
    multi_accept on;  
    #完成 异步 操作 最大数 为 128 
    worker_aio_requests 128;
    #调试 指定 连接 的 IP 地址 和 端口 是 192. 168. 0. 0/ 24
    #debug_connection 192.168.0.0/24;  
    }
    
    http 
    {
     include proxy.conf; 
     include vhosts/*.conf;
    }
    

    9.2 [root@xag132 conf]# cat proxy.conf (反向代理配置)

    include       mime.types;
    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"';
    
    access_log  logs/access.log  main;
    charset utf-8;
    
    sendfile       on;
    tcp_nopush     on;
    tcp_nodelay    on;
    keepalive_timeout  65;
      
    fastcgi_connect_timeout 3000;
    fastcgi_send_timeout 3000;
    fastcgi_read_timeout 3000;
    fastcgi_buffer_size 256k;
    fastcgi_buffers 8 256k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    fastcgi_intercept_errors on;
         
    client_header_timeout 600s;
    client_body_timeout 600s;
        
    client_max_body_size 100m;           
    client_body_buffer_size 256k;         
        
    gzip  on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 9;
    gzip_types       text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php;
    gzip_vary on;
    
    proxy_buffering on; 
    #启用 响应 数据 缓冲区 
    
    proxy_buffers 8 8k; 
    #设置每个 HTTP 请求 读取 上游 服务器 响应 数据 缓冲区 的 大小 为 64KB 
    
    proxy_buffer_size 8k; 
    #设置每个 HTTP 请求 读取 响应 数据 第一 部分 缓冲区 的 大小 为 8KB
    
    proxy_busy_buffers_size 16k; 
    #接收 上游 服务器 返回 响应 数据 时, 同时 用于 向 客户 端 发送 响应 的 缓 #冲 区 的 大小 为 16KB 
    
    proxy_limit_rate 0; 
    #不限 制 每个 HTTP 请求 每秒 读取 上游 服务器 响应 数据 的 流量 
    
    proxy_request_buffering on; 
    #启用 客户 端 HTTP 请求 读取 缓冲区 功能 
    
    proxy_http_version 1.1; 
    #使用 HTTP 1. 1 版本 协议 与 上游 服务器 建立 通信 
    
    proxy_connect_timeout 5s; 
    #设置与 上游 服务器 建立 连接 的 超时 时间 为 5s 
    
    proxy_intercept_errors on; 
    #拦截 上游 服务器 中 响应 码 大于 300 的 响应 处理 
    
    proxy_read_timeout 60s; 
    #从 上游 服务器 获取 响应 数据 的 间隔 超时 时间 为 60s
    
    proxy_send_timeout 60s; 
    #向上游 服务器 发送 请求 的 间隔 超时 时间 为 60s 
    
    #设置发送 给 上游 服务器 的 头 属性 字段 Host 为 客户 端 请求 头头 字段 Host 的 值 
    proxy_set_header Host $host:$server_port; 
    
    #设置发送 给 上游 服务器 的 头 属性 字段 Referer 为 客户 端 请求 头头 字段 的 值 Host 
    proxy_set_header Referer $http_referer; 
    
    #设置发送 给 上游 服务器 的 头 属性 字段 Cookie 为 客户 端 请求 头头 字段 的 值Host 
    proxy_set_header Cookie $http_cookie; 
    
    #设置发送 给 上游 服务器 的 头 属性 字段 X- Real-IP 为 客户 端 的 IP 
    proxy_set_header X-Real-IP $remote_addr; 
    
    #设置发送 给 上游 服务器 的 头 属性 字段 X-Forwarded-For 为 客户 端 请求 头 的 X- Forwarded- For 的 
    #值, 如果 没有 该 字段, 则 等于 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    
    #设置发送 给 上游 服务器 的 头 属性 字段 X-Forwarded-Proto 为 请求 协议 的 值 
    proxy_set_header X-Forwarded-Proto $scheme;
    

    9.3 cat 81.conf
    访问132机器的81端口,反向代理到129机器的81端口

    server 
    {
        listen 81;
        server_name 192.168.40.132;
        index index.html index.jsp index.htm;
        root /usr/local/nginx/html;
       
        access_log  /usr/local/nginx/logs/81-access.log main;
        error_log   /usr/local/nginx/logs/81-error.log;
      
    location / 
      {
        proxy_pass http://192.168.40.129:81;
        proxy_redirect off ;
        
      }
    }
    

    9.3 cat 82.conf
    访问132机器的81端口,反向代理到129机器的81端口

    server 
    {
        listen 82;
        server_name 192.168.40.132;
        index index.html index.jsp index.htm;
        root /usr/local/nginx/html;
       
        access_log  /usr/local/nginx/logs/82-access.log main;
        error_log   /usr/local/nginx/logs/82-error.log;
      
    location / 
      {
        proxy_pass http://192.168.40.129:82;
        proxy_redirect off ;
        
      }
    }
    

    9.4
    http://132:821/ex/ --> http://129:82/examples/

    [root@xag132 vhosts]# cat 82-ex.conf 
    server 
    {
        listen 821;
        server_name 192.168.40.132;
        index index.html index.jsp index.htm;
        root /usr/local/nginx/html;
       
        access_log  /usr/local/nginx/logs/82-ex-access.log main;
        error_log   /usr/local/nginx/logs/82-ex-error.log;
      
    location /ex/ 
      {
        proxy_pass http://192.168.40.129:82/examples/;
        proxy_redirect off ;
        
      }
    }
    

    9.5 cat slb80.conf 访问220机器的80端口myweb,负载均衡到后端的两台机器224和225的81端口myweb

    upstream slb80 
    {
        server 10.0.30.224:81 max_fails=3 fail_timeout=30s;   #max_fails = 3 为允许失败的次数,默认值为1
        server 10.0.30.225:81 max_fails=3 fail_timeout=30s;   #fail_timeout =30s 当max_fails次失败后,暂停将请求分发到该后端服务器的时间
    }
    server 
    {
        listen 80;
        server_name 10.0.30.220;
        index index.html index.jsp index.htm;
        root /usr/local/nginx/html;
       
        access_log  /usr/local/nginx/logs/slb80-access.log main;
        error_log   /usr/local/nginx/logs/slb80-error.log;
      
    location /myweb/ 
      {
        proxy_pass http://slb80/myweb/;
        proxy_redirect off ;
        
      }
    }
    

    9.6 cat slb443.conf

    upstream slb443 
    {
        server 192.168.40.129:81 max_fails=3 fail_timeout=30s;
        server 192.168.40.129:82 max_fails=3 fail_timeout=30s;
    }
    server 
    {
        listen 443 ssl;
        server_name 192.168.40.132;
        index index.html index.jsp index.htm;
        root /usr/local/nginx/html;
       
        access_log  /usr/local/nginx/logs/slb443-access.log main;
        error_log   /usr/local/nginx/logs/slb443-error.log;
      
        ssl_certificate      /usr/local/nginx/cer/web132.crt;
        ssl_certificate_key  /usr/local/nginx/cer/web132.key;
        
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
    
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers  on;
    
     location /ex/ 
     {
        proxy_pass http://slb443/examples/;
        proxy_redirect off ;
        
     }
    }
    
    

    9.5 cat slb80.conf http 瀏覽器訪問 自動跳轉 https

    server 
    {
            listen       80;
            server_name  10.0.30.221;
    
            access_log  /usr/local/nginx/logs/slb80-access.log main;
            error_log   /usr/local/nginx/logs/slb80-error.log;
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html 
            {
               root /usr/local/nginx/html;
            }
    
            return      301 https://$server_name$request_uri; 
    }
    

    级别越高,记录的信息越少,生产场景一般是warn|error|crit这三个级别之一

    级别 级 别 值 级 别 说 明
    debug 8 代码中标记为 NGX_LOG_DEBUG 的输出,输出最为详细,配合调试使用
    info 7 代码中标记为 NGX_LOG_INFO 的输出,因包括除 debug 级别的所有输出,故同样会消耗大量磁盘 IO 资源
    notice 6 代码中标记为 NGX_LOG_NOTICE 的输出
    warn 5 代码中标记为 NGX_LOG_WARN 的输出
    error 4 代码中标记为 NGX_LOG_ERROR 的输出,[生产推荐]
    crit 3 代码中标记为 NGX_LOG_CRIT 的输出
    alert 2 代码中标记为 NGX_LOG_ALERT 的输出
    emerg 1 代码中标记为 NGX_LOG_EMERG 的输出

    相关文章

      网友评论

          本文标题:Centos 7.5 下安装 Nginx 1.20.1

          本文链接:https://www.haomeiwen.com/subject/rjoyultx.html