Nginx

Nginx

 

Nginx简介

  什么是web服务

    web就是B/S架构

 

  web服务器软件

    网络模型

      select  while循环一直询问访问需求

      poll

      epoll    在端口监控有需求立马相应

 

    apache:  select

 

    Nginx   :

        windows   中   select

        linux    中    epoll

        官网:https://nginx.org/

        软件:https://nginx.org/download/

 

Nginx的命令

  -v : 打印版本号

    [root@web01 ~]# nginx -v

      nginx version: nginx/1.20.2

 

  -V : 打印版本号和配置项

    [root@web01 ~]# nginx -V

      nginx version: nginx/1.20.2

      built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)

      built with OpenSSL 1.0.2k-fips 26 Jan 2017

      TLS SNI support enabled

      configure arguments: --prefix=/etc/nginx

 

  -t : 检查配置文件

    [root@web01 ~]# nginx -t

      nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

      nginx: configuration file /etc/nginx/nginx.conf test is successful

 

  -T : 测试配置文件并启动

 

  -q :打印错误日志

 

  -s : 操作进程

    stop      :停止

    quit    :退出

    reopen :重启

    reload  :重载

 

  -p : 指定nginx的工作目录

 

  -e : 指定错误日志路径

 

  -c : 指定配置文件的路径

 

  -g : 设置一个全局的Nginx配置项

    [root@web01 ~]# nginx -g 'daemon off;'

 

Nginx配置文件

  全局配置和模块配置

  全局配置

    user                       : 指定Nginx的启动用户

 

    worker_processes : 定义Nginx的worker进程数

      auto === CPU数量

 

    error_log     : 错误日志路径

 

    pid               : pid的存放文件路径

 

    events         : 模块配置

      worker_connections :每一个worker进程最多同时接入多少个请求

      use            : 指定Nginx的网络模型

 

    http              : web服务的模块

      include     : 加载外部的配置项

      default_type : 如果找不到文件的类型,则按照指定默认类型处理

      log_format    : 定义日志格式

log_format json '{"@timestamp":"$time_iso8601",'
  '"host":"$server_addr",'
  '"service":"nginxTest",'
  '"trace":"$upstream_http_ctx_transaction_id",'
  '"log":"log",'
  '"clientip":"$remote_addr",'
  '"remote_user":"$remote_user",'
  '"request":"$request",'
  '"http_user_agent":"$http_user_agent",'
  '"size":$body_bytes_sent,'
  '"responsetime":$request_time,'
  '"upstreamtime":"$upstream_response_time",'
  '"upstreamhost":"$upstream_addr",'
  '"http_host":"$host",'
  '"url":"$uri",'
  '"domain":"$host",'
  '"xff":"$http_x_forwarded_for",'
  '"referer":"$http_referer",'
  '"status":"$status"}';
access_log /var/log/nginx/access.log json ;

      sendfile              : 高效读取文件

      keepalive_timeout : 长连接保持连接的

        HTTP 1.0 短链接

        HTTP 1.1 长连接

      server         : 网址模块

        listen      : 监听的端口

        server_name    : 定义域名

        location     : 访问路径

          root    : 指定网址路径

          index : 指定网址的索引文件

 

Nginx部署 

  1.yum安装

    [root@web01 ~]# 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
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

    [root@web01 ~]# yum install nginx -y

    [root@web01 ~]# systemctl stop httpd

    [root@web01 ~]# systemctl start nginx

  详情见yum仓库

 

  2.二进制安装

 

  3.编译安装

    [root@web01 ~]# wget https://nginx.org/download/nginx-1.20.2.tar.gz

    [root@web01 ~]# tar -xf nginx-1.20.2.tar.gz

    [root@web01 nginx-1.20.2]# ./configure

    [root@web01 nginx-1.20.2]# make

    [root@web01 nginx-1.20.2]# make install

 

部署游戏案例

  1.上传代码

    [root@web01 ~]# cd /opt/

    [root@web01 opt]# mkdir Super_Marie

 

  2.编辑配置文件

    [root@web01 opt]# cd /etc/nginx/conf.d

    [root@web01 conf.d]# vim /etc/nginx/conf.d/game.conf

server {
  listen 80;
  server_name game.test.com;
  location / {
    root /opt/Super_Marie;
    index index.html;
  }
}

 

  3.测试配置文件是否正常

    [root@web01 conf.d]# nginx -t

      nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

      nginx: configuration file /etc/nginx/nginx.conf test is successful

 

  4.重启Nginx

    [root@web01 conf.d]# systemctl restart nginx

 

  5.域名解析

    C:\Windows\System32\drivers\etc\hosts

172.16.1.7 game.test.com

 

Nginx虚拟主机

  1.基于多IP的方式

[root@web01 conf.d]# cat game2.conf 
server {
    listen 80;
    server_name 192.168.15.7;
    location / {
    root /opt/Super_Marie;
        index index.html;
    }
}
server {
    listen 80;
    server_name 172.16.1.7;
    location / {
        root /opt/tank;
        index index.html;
    }
}

  2.基于多端口的方式

[root@web01 conf.d]# cat game3.conf 
server {
    listen 80;
    server_name 192.168.15.7;
    location / {
        root /opt/Super_Marie;
        index index.html;
    }
}
server {
    listen 81;
    server_name 192.168.15.7;
    location / {
        root /opt/tank;
        index index.html;
    }
}

  3.基于多域名的方式

[root@web01 conf.d]# cat game4.conf 
server {
    listen 80;
    server_name www.game.com;
    location / {
        root /opt/Super_Marie;
        index index.html;
    }
}
server {
    listen 80;
    server_name www.game1.com;
    location / {
        root /opt/tank;
        index index.html;
    }
}

 

Nginx日志

  记录:

    网站状态码是500的比例

    网站的访问来源

    网站排错

 

  参数:

    $remote_addr       : 客户端IP

    $http_x_forwarded_for  : 真实的客户端IP(在反向代理中生效)

 

Nginx访问控制模块

  ngx_http_access_module

  允许或者拒绝某些IP访问

    deny  : 拒绝

    allow : 允许

 

  案例1:允许192.168.15.1访问,不允许其他IP访问

    allow 192.168.15.1;

    deny all;

 

  案例2:允许192.168.15.0这个网段访问,不允许其他网段访问

    allow 192.168.15.0/24;

    deny all;

 

  案例3:只允许通过VPN来访问

    allow 172.16.1.81;

    deny all;

 

  ngx_http_auth_basic_module

  访问之前需要登录

  1、安装httpd-tools

    [root@web01 ~]# yum install httpd-tools -y

 

  2、生成用户名密码文件

    [root@web01 ~]# htpasswd -c /etc/nginx/auth chenyang

    New password:

    Re-type new password:

    Adding password for user chenyang

 

  3、将文件路径加入Nginx配置

    [root@web01 ~]# vim /etc/nginx/conf.d/game4.conf

      auth_basic "Welcome To Login";

      auth_basic_user_file /etc/nginx/auth;

 

  4、重启Nginx

    [root@web01 ~]# nginx -t

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

    nginx: configuration file /etc/nginx/nginx.conf test is successful

    [root@web01 ~]# systemctl restart nginx

 

  ngx_http_autoindex_module

  展示目录索引

    autoindex on;

    autoindex_exact_size on;

    autoindex_localtime on;

    autoindex_format json;

 

Nginx状态监控模块

  ngx_http_stub_status_module

  监控Nginx运行状态

[root@web01 conf.d]# cat game5.conf 
server {
    listen 80;
    server_name 192.168.15.7;
    location / {
        stub_status;
    }
}

 

Nginx访问连接控制模块

  ngx_http_limit_conn_module

  控制Nginx连接数

  1.安装ab测试命令

    yum install httpd-tools -y

 

 

  2.ab 参数

    -n : 总共需要访问多少次

    -c : 每次访问多少个

[root@web01 conf.d]# cat game5.conf 
# limit_req_zone $remote_addr zone=one:10m rate=1r/s;
limit_conn_zone $remote_addr zone=addr:10m;
server {
    listen 80;
    server_name 192.168.15.7;
    # limit_req zone=one burst=5;
    limit_conn addr 1;
    location / {
        root /opt/Super_Marie;
        index index.html;
    }
}

 

  ngx_http_limit_req_module

  控制Nginx访问量

  1.连接池

    limit_req_zone $remote_addr zone=one:10m rate=1r/s;

    声明连接池 变量 名称 连接池的大小 速率

 

  2.限制数

 

  案例1:要求每秒只能有一个访问

[root@web01 conf.d]# cat game5.conf 
limit_req_zone $remote_addr zone=one:10m rate=1r/s;
server {
    listen 80;
    server_name 192.168.15.7;
    limit_req zone=one burst=5;
    location / {
        root /opt/Super_Marie;
        index index.html;
    }
}

 

END

 

posted @ 2021-12-31 16:49  Snails蜗牛  阅读(98)  评论(1编辑  收藏  举报