01 、nginx安装部署:

    两种安装方式:
    01. yum安装软件
        a 使用官方yum源进行安装    安装的是最新版本  软件目录结构比较标准 (推荐)
        b 使用非官方yum源进行安装  安装的不是最新版  目录结构会发生变化
    02. 编译安装软件 
        第一个步骤:
        wget http://nginx.org/download/nginx-1.16.0.tar.gz
        PS: 解决软件的依赖 openssl-devel pcre-devel
        第二个步骤: 
        解压下载好的软件, 并进入到软件目录中
        第三个步骤:
        编译安装三步曲
        a 进行配置操作
        ./configure --prefix=  --user=USER 

          ./configure --prefix=/data/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream

--prefix=PATH     set installation prefix    
                          指定程序安装路径
        --user=USER       set non-privileged user for worker processes
                          设置一个虚拟用户管理worker进程(安全)
        --group=GROUP     set non-privileged group for worker processes
                          设置一个虚拟用户组管理worker进程(安全)
        b 进行软件的编译过程:
        make 编译(翻译)    
        C(英国人)       代码(任务文件)  系统识别  翻译  系统(中国人)处理代码
        翻译效率比较低  翻译官(gcc)
        python(日本人)  代码(任务文件)  系统识别  翻译  系统(中国人)处理代码
        翻译效率比较高  百度翻译(python解释器)  
        c 编译安装过程
        make install
    
    yum官方源安装方法:
    第一个历程: 更新nginx官方yum源
    vim /etc/yum.repos.d/nginx.repo
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    
    第二个历程: yum安装nginx软件
    yum install -y nginx

    第三个历程: 启动nginx服务,检查服务是否安装正确
    systemctl start nginx
    systemctl enable nginx
    测试访问nginx服务   

02、 nginx服务配置文件

/etc/nginx/nginx.conf           --- 主配置文件
    第一个部分: 配置文件主区域配置
    user  www;                    --- 定义worker进程管理的用户
    补充: nginx的进程
    master process:  主进程        ---管理服务是否能够正常运行   boss
    worker process:  工作进程    ---处理用户的访问请求         员工  
    worker_processes  2;        ---定义有几个worker进程  == CPU核数 / 核数的2倍
    error_log  /var/log/nginx/error.log warn;   --- 定义错误日志路径信息
    pid        /var/run/nginx.pid;              --- 定义pid文件路径信息
    
    第二个部分: 配置文件事件区域
    events {                    
        worker_connections  1024;   --- 一个worker进程可以同时接收1024访问请求
    }
    
    第三个部分: 配置http区域
    http {
        include       /etc/nginx/mime.types;      --- 加载一个配置文件
        default_type  application/octet-stream;   --- 指定默认识别文件类型
        log_format  oldboy  '$remote_addr - $remote_user [$time_local] "$request" '
                            '$status $body_bytes_sent "$http_referer" '
                            '"$http_user_agent" "$http_x_forwarded_for"';
                          --- 定义日志的格式        
        access_log  /var/log/nginx/access.log  oldboy;
                          --- 指定日志路径          
        sendfile        on;   ???
        #tcp_nopush     on;   ???
        keepalive_timeout  65;   --- 超时时间
        #gzip  on;
        include /etc/nginx/conf.d/*.conf;        --- 加载一个配置文件
    }


    /etc/nginx/nginx.d/default  --- 扩展配置(虚拟主机配置文件)
    第四个部分: server区域信息(配置一个网站 www/bbs/blog -- 一个虚拟主机)
    server {
        listen       8080;                --- 指定监听的端口
        server_name  www.oldboy.com;      --- 指定网站域名                     
        root   /usr/share/nginx/html;     --- 定义站点目录的位置
        index  index.html index.htm;      --- 定义首页文件
        error_page   500 502 503 504  /50x.html;   --- 优雅显示页面信息
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }

       1) /etc/logrotate.d
       实现nginx日志文件定时切割处理
       日志切割方法一: 利用脚本实现切割
       #!/bin/bash
       
       mv /var/log/nginx/access.log  /var/log/nginx/access_$(date +%F).log
       systemctl restart nginx
       日志切割方法二: 利用专用文件切割程序--logrotate

03、 nginx服务的企业应用

    1. 利用nginx服务搭建一个网站(www)
    第一个历程: 编写虚拟主机配置文件
    cd /etc/nginx/conf.d/
    vim www.conf
    server {
       listen        80;
       server_name   www.oldboy.com;
       location  /oldboy {
         root  /usr/share/nginx/html;
         index oldboy.html;
       }
    }

    第二个历程: 需要获取开发人员编写的网站代码
    <html>
      <meta charset="utf-8">
      <head>
        <title>nginx</title>
      </head>
    </html>
    
    第三个历程: 重启nginx服务(平滑重启)
    两种方法:
    systemctl reload nginx 
    nginx -s reload
    
    nginx命令参数
    -t            : test configuration and exit
                    检查测试配置文件语法
    -s            : send signal to a master process: stop, quit, reopen, reload
                    控制服务停止或者重新启动
    
    第四个历程: 编写DNS配置信息
    真实域名: 在阿里云上进行DNS解析记录配置
    模拟域名: 在windows主机的hosts文件中进行配置即可
              C:\Windows\System32\drivers\etc\hosts  -->  10.0.0.100  www.oldboy.com
              
    第五个历程: 进行测试访问
    浏览器中: http://www.oldboy.com

网站页面的访问原理:
  01. 将域名进行解析 www.oldboy.com --- 10.0.0.100
  02. 建立TCP的连接(四层协议)
  10.0.0.100 目标端口 8080
  03. 根据应用层HTTP协议发出请求
  请求报文: hosts: bbs.oldboy.com
  04. 没有相同域名的server主机,会找满足端口要求的第一个主机
  显示主机的网站页面

部署搭建网站常见错误:
  01. 网站服务配置文件编写不正确
    404 错误
    解决方法一: 修改nginx配置文件---location
    解决方法二: 在站点目录中创建相应目录或文件数据信息
    403 错误
    解决方法一: 不要禁止访问
    解决方法二: 因为没有首页文件
  02. DNS信息配置不正确
  03. nginx配置文件修改一定要重启服务;
     站点目录中代码文件信息调整,不需要重启服务

04、nginx的企业实践应用

3. 企业中虚拟主机访问方式
    a 基于域名的方式进行访问:
    b 基于地址的方式进行访问: (只能用指定地址访问)   --- 负载均衡+高可用服务
      server {
         listen        10.0.0.100:80;
         server_name   www.oldboy.com;
         location  / {
           root  /html/www;
           index index.html;
         }
      }
      PS: 服务配置文件中涉及到地址修改,必须重启nginx服务,不能平滑重启
    
    c 基于端口的方式进行访问:        zabbix服务(apache:80)  + web服务(nginx:80) --> 主机
    server {
       listen        8080;
       server_name   www.oldboy.com;
       location  / {
         root  /html/www;
         index index.html;
       }
    }


    4. 企业中网站的安全访问配置
    a 根据用户访问的地址进行控制
      10.0.0.0/24   www.oldboy.com/AV/  不能访问
      172.16.1.0/24 www.oldboy.com/AV/  可以访问
      
      nginx访问模块: ngx_http_access_module
      举例配置:
      location / {
          deny  192.168.1.1;
          allow 192.168.1.0/24;
          allow 10.1.1.0/16;
          allow 2001:0db8::/32;
          deny  all;
      }
      指令用法
      Syntax:    deny address | CIDR | unix: | all;
      Default:    —
      Context:    http, server, location, limit_except

       第一个历程: 编写配置文件
      [root@web01 conf.d]# vim www.conf 
      server {
         listen        80;
         server_name   www.oldboy.com;
         location / {
           root  /html/www;
           index index.html;
         }
         location /AV {
           deny  10.0.0.0/24;
           allow 172.16.1.0/24;
           root  /html/www;
           index index.html;
         }
      }
      补充: 
      location外面的信息, 全局配置信息
      location里面的信息, 局部配置信息
    
    b 根据用户访问进行认证
      nginx认证模块: ngx_http_auth_basic_module
      举例配置: 
      location / {
         auth_basic           "closed site";    --- 开启认证功能
         auth_basic_user_file conf/htpasswd;    --- 加载用户密码文件
      }
     
      第一个历程: 编写虚拟主机配置文件 
      server {
         listen        80;
         server_name   www.oldboy.com;
         location / {
           root  /html/www;
           index index.html;
           auth_basic      "oldboy-01";
           auth_basic_user_file password/htpasswd;
         }    

      第二个历程: 创建密码文件(文件中密码信息必须是密文的)
      htpasswd  创建一个有密文信息的密码文件
      [root@web01 conf.d]# rpm -qf `which htpasswd` 
      httpd-tools-2.4.6-89.el7.centos.x86_64

      htpasswd命令参数说明:
      -c  Create a new file.  *****
          创建一个密码文件
      -b  Use the password from the command line rather than prompting for it. *****
          免交互方式输入用户密码信息

      修改密码文件权限: ???
      chmod 600 ./htpasswd 
      
      500 Internal Server Error
      01. 内部程序代码编写有问题
      02. 程序服务中文件权限不正确
      
      curl命令参数:
      -u, --user USER[:PASSWORD]  Server user and password
      [root@web01 password]# curl www.oldboy.com -u oldboy
      Enter host password for user 'oldboy':
      10.0.0.100 www.oldboy.com
      [root@web01 password]# curl www.oldboy.com -u oldboy:123456
      10.0.0.100 www.oldboy.com
1) 利用nginx服务搭建网站文件共享服务器
    第一个步骤: 编写配置文件(www.conf)
    nginx模块功能: ngx_http_autoindex_module 
    Syntax:    autoindex on | off;
    Default:    
    autoindex off;
    Context:    http, server, location

    server {
       listen        80;
       server_name   www.oldboy.com;
       location / {
         root  /html/www;
         auth_basic      "oldboy-sz-01";
         auth_basic_user_file password/htpasswd;
         autoindex on;    --- 开启nginx站点目录索引功能
    }
    PS: 1. 需要将首页文件进行删除
        2. mime.types媒体资源类型文件作用
           文件中有的扩展名信息资源,   进行访问时会直接看到数据信息
           文件中没有的扩展名信息资源, 进行访问时会直接下载资源
           
    网站页面目录数据,中文出现乱码,如何解决:
    location / {
       root  /html/www;
       #index index.html;
       auth_basic      "oldboy-01";
       auth_basic_user_file password/htpasswd;
       autoindex on;
       charset utf-8;   --- 修改目录结构中出现的中文乱码问题
     }

    2) 利用nginx服务搭配置文件别名功能
    第一个历程: 编写配置文件 
    server_name   www.oldboy.com old.com;
    第二个历程: 配置好解析信息
    
    作用:
    01. 编写网站访问测试
    02. 定位要访问的网站服务器


    3) 利用nginx状态模块功能对网站进行监控
    状态模块: ngx_http_stub_status_module
    Syntax:    stub_status;
    Default:    —
    Context:    server, location

    第一个历程: 编写配置文件 
    location = /status {
        stub_status;
    }
    
    第二个历程: 重启nginx服务,并且编写解析文件
    systemctl reload nginx 
    10.0.0.100     state.oldboy.com
       
    Active connections:  激活的连接数信息  4000用户  3500
    accepts: 接收的连接数汇总(综合)  TCP
    handled: 处理的连接数汇总(综合)  TCP
    requests: 总计的请求数量  HTTP协议请求 
    Reading: nginx服务读取请求报文的数量    100人点餐
    Writing: nginx服务响应报文信息数量      100人响应
    Waiting: nginx队列机制,要处理(读取或者响应保存进行保存)   监控

4) nginx日志功能配置

访问日志: /var/log/nginx/access.log    ngx_http_log_module
    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  /var/log/nginx/access.log  main;                                调用日志格式
    
    $remote_addr               显示用户访问源IP地址信息
    $remote_user            显示认证的用户名信息
    [$time_local]           显示访问网站时间
    "$request"              请求报文的请求行信息
    $status                 用户访问网站状态码信息
    $body_bytes_sent        显示响应的数据尺寸信息
    $http_referer           记录调用网站资源的连接地址信息(防止用户盗链)                    
                            老男孩nginx---access.log---莫文杰(荒原饮露---老男孩图片链接)---http_referer(链接)
    $http_user_agent        记录用户使用什么客户端软件进行访问页面的  (谷歌 火狐 IE 安卓 iphone)
    $http_x_forwarded_for   ??? 负载均衡

    
    错误日志: /var/log/nginx/error.log  --- Core functionality
    Syntax:        error_log file [level];  指定错误日志路径以及错误日志记录的级别
    Default:    error_log logs/error.log error;
    Context:    main, http, mail, stream, server, location

    error_log  /var/log/nginx/error.log warn;
    错误级别:
    debug        :调试级别, 服务运行的状态信息和错误信息详细显示     信息越多
    info        :信息级别, 只显示重要的运行信息和错误信息
    notice      :通知级别: 更加重要的信息进行通知说明
    warn        :警告级别: 可能出现了一些错误信息,但不影响服务运行
    error        :错误级别: 服务运行已经出现了错误,需要进行纠正      推荐选择
    crit        :严重级别: 必须进行修改调整
    alert       :严重警告级别: 即警告,而且必须进行错误修改
    emerg       :灾难级别: 服务已经不能正常运行                      信息越少
    
    PS: 日志文件信息需要做切割处理   几个G

5) nginx服务location作用说明

    模块说明: ngx_http_core_module
    location进行匹配(uri)
    错误页面优雅显示
    location /oldboy {
       root /html/www;
       error_page  404  /oldboy.jpg;
    }
    location /oldgirl {
       root /html/www;
       error_page  404  /oldgirl.jpg;
    }
    
    location详细配置:
    Syntax:    location [ = | ~ | ~* | ^~ ] uri { ... }
            location @name { ... }
    Default:    —
    Context:    server, location
    location = / {              --- 精确匹配    优先级01 最高
    [ configuration A ]
    }
    
    location / {                --- 默认匹配    优先级04 最低
        [ configuration B ]
    }
    
    location /documents/ {      --- 按照目录进行匹配    优先级03
        [ configuration C ]
    }
    
    location ^~ /images/ {      --- 优先匹配/不识别uri信息中符号信息       优先级02
        [ configuration D ]
    }
     
    location ~* \.(gif|jpg|jpeg)$ {  --- 不区分大小写进行匹配  优先级03
        [ configuration E ]
    }
    
    6) 利用nginx实现页面跳转功能
    利用rewrite模块是跳转功能:  http_rewrite_module
    Syntax:    rewrite regex replacement [flag];   rewite  匹配的正则信息  替换成什么信息
    Default:    —
    Context:    server, location, if
    
    rewrite www.oldboy.com/(.*) http://www.oldboy.com/$1 permanent;   重写规则配置
        ^/        (.*)
    baidu.com    /  oldboy.html                  跳转方式
    
    www.baidu.com/oldboy.html
    
    跳转方式:
    永久跳转:  permanent   301    会将跳转信息进项缓存
    临时跳转:  redirect    302    不会缓存跳转信息
    
    出现无限跳转如何解决:
    第一种方法: 利用不同server区块配置打破循环
    server {
       server_name  tv.xik518.com;
       rewrite ^/(.*) http://tv.aoz998.com/$1 permanent;
    }
    第二种方法: 利用if判断实现打破循环
    if ($host ~* "^oldboy.com$") {
      rewrite ^/(.*) http://www.oldboy.com/$1 permanent;
    }

 

证书配置 https server。注释掉之前的 http server 配置,新增 https server:

server {
    # 服务器端口使用443,开启ssl, 这里ssl就是上面安装的ssl模块
    listen       443 ssl;
    # 域名,多个以空格分开
    server_name  hack520.com www.hack520.com;
client_max_body_size 20m; #文件上传大小限制默认1m # ssl证书地址 ssl_certificate
/usr/local/nginx/cert/ssl.pem; # pem文件的路径 ssl_certificate_key /usr/local/nginx/cert/ssl.key; # key文件的路径 # ssl验证相关配置 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 / { root html; index index.html index.htm; }
}
将 http 重定向 https 301永久跳转
server {
    listen       80;
    server_name  hack520.com www.hack520.com;
    return 301 https://$server_name$request_uri;
}

 

安全方面一般会禁用相关页面
location ~ /.*/swagger-ui.html { deny all; } location ~* \/actuator { deny all ; } location ~* \/druid { deny all ; } location ~* \/api-docs { deny all ; } location ~* \/tx { deny all ; } location ~* \/swagger-resources { deny all ; }

 监控模块nginx-module-vts
参考以下
https://blog.csdn.net/zhuimeng_by/article/details/105819481

遇到的报错

 

Nginx配置跨域请求 Access-Control-Allow-Origin * 报错
在服务端配置
location / {  
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
    add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';

    if ($request_method = 'OPTIONS') {
        return 204;
    }
}
或者只加一条: add_header Access-Control-Allow-Origin *;

 

posted on 2021-07-08 11:19  宇小白  阅读(113)  评论(0编辑  收藏  举报