nginx整体入门


nginx 常用命令

nginx -s reload  # 向主进程发送信号,重新加载配置文件,热重启
nginx -s reopen # 重启 Nginx
nginx -s stop    # 快速关闭
nginx -s quit    # 等待工作进程处理完成后关闭
nginx -T         # 查看当前 Nginx 最终的配置
nginx -t -c <配置路径>    # 检查配置是否有问题,如果已经在配置目录,则不需要-c
####################################################################
systemctl start nginx    # 启动 Nginx
systemctl stop nginx     # 停止 Nginx
systemctl restart nginx  # 重启 Nginx
systemctl reload nginx   # 重新加载 Nginx,用于修改配置后
systemctl enable nginx   # 设置开机启动 Nginx
systemctl disable nginx  # 关闭开机启动 Nginx
systemctl status nginx   # 查看 Nginx 运行状态

nginx 配置文件

  • 目录结构
main        # 全局配置,对全局生效
├── events  # 工作模式,配置影响 Nginx 服务器或与用户的网络连接
├── http    # 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
│   ├── upstream # 负载均衡服务器设置,配置后端服务器具体地址,负载均衡配置不可或缺的部分
│   ├── server   # 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块
│   ├── server
│   │   ├── location  # server 块可以包含多个 location 块,location 指令用于匹配 uri
│   │   ├── location
│   │   └── ...
│   └── ...
└── ...
  • 典型配置
# 运行用户(启动者用户名),默认即是nginx,可以不进行设置
user  nginx;
# Nginx 进程数,一般设置为和 CPU 核心数二倍
worker_processes  1;
# Nginx 的错误日志存放目录
error_log  logs/error.log warn;
# Nginx 服务启动时的 pid 存放位置
pid        logs/nginx.pid;

events {
	# 工作模型:使用epoll的I/O模型(如果你不设置、不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
    use epoll;
    # 每个进程允许最大并发数(打开的文件数限制)
    worker_connections 1024;
}
# 配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
http {
    # 设置日志模式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
	# Nginx访问日志存放位置
    access_log  /var/log/nginx/access.log  main;
	# 开启高效传输模式
    sendfile            on;
    # 减少网络报文段的数量
    tcp_nopush          on;
    tcp_nodelay         on;
    # 保持连接的时间,也叫超时时间,单位秒
    keepalive_timeout   65;
    types_hash_max_size 2048;

	# 文件扩展名与类型映射表
    include             /etc/nginx/mime.types;
    # 默认文件类型
    default_type        application/octet-stream;
	# 加载子配置项
    include /etc/nginx/conf.d/*.conf;

    # 配置后端服务器,进行负载均衡配置,可以多个upstream
    upstrean houduan {
    	server 127.0.0.1:8080;
    }

    server {
    	# 配置监听的端口
        listen       80;
        # 配置的域名
        server_name  localhost;

        location / {
       		# 网站根目录
            root   /usr/share/nginx/html;
            # 默认首页文件
            index  index.html index.htm;
            # 禁止访问的ip地址,可以为all
            deny 172.168.22.11;
            # 允许访问的ip地址,可以为all
            allow 172.168.33.44;
            # 请求的后端代理,实际地址位于upstream
            proxy_pass http:houduan;
    	}
    # 默认50x对应的访问页面
    error_page 500 502 503 504 /50x.html;
    # 同上
    error_page 400 404 error.html;
    }
}

nginx 代理和下·负载均衡

upstream 进行设置代理

upstrean houduan {      # 配置后端服务器,进行正反向代理,可以多个upstream
    	server 127.0.0.1:8080;
    	server 127.0.0.1:8081;
}

负载均衡方式

1.默认:轮询
upstrean houduan {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}

2.权重
upstrean houduan {
    server 127.0.0.1:8080 wight=3;
    server 127.0.0.1:8081 wight=1;
}

3.iphash
upstrean houduan {
	ip_hash;
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}

4.最小连接数
upstrean houduan {
	least_conn;
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}

5.fair优先分配连接时间短的
upstrean houduan {
	fair;
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}

nginx 限流

主流的限流算法:漏桶、令牌桶、计数器、滑动窗口

nginx 使用的限流算法:

  • 令牌桶

    令牌以固定的频率产生,并缓存到令牌桶中;

    令牌桶满时,多余的令牌被丢弃;

    请求要消耗等比例的令牌才能被处理;

    令牌不够时,请求被缓存;

  • 漏桶

    请求被缓存到桶中,桶满时,请求会被丢弃;

    匀速处理请求;

  • 令牌桶与漏桶对比

    令牌桶有一个缓存桶和一个队列(存放过多的请求);漏桶只有缓存桶,请求过多会被丢弃。

常用:

# 限制访问速率---漏桶--匀速处理
limit_req_zone  $binary_remote_addr  zone=one:10m   rate=1r/s;

 server {
     location /search/ {
     limit_req   zone=one;
 	}
}
## 设置桶大小
# 限制访问速率---漏桶--匀速处理
limit_req_zone  $binary_remote_addr  zone=one:10m   rate=1r/s;

 server {
     location /search/ {
     limit_req   zone=one  burst=5; # 5表示0-5可以处理6个请求
 	}
}

## 设置桶大小+进缓存直接处理,不等待
# 限制访问速率---漏桶--匀速处理
limit_req_zone  $binary_remote_addr  zone=one:10m   rate=1r/s;

 server {
     location /search/ {
     limit_req   zone=one  burst=5 nodelay; # 5表示0-5可以处理6个请求
 	}
}

## 设置桶大小+进缓存直接处理,不等待+给一个失败返回码
# 限制访问速率---漏桶--匀速处理
limit_req_zone  $binary_remote_addr  zone=one:10m   rate=1r/s;

 server {
     location /search/ {
     limit_req   zone=one  burst=5 nodelay; # 5表示0-5可以处理6个请求
 	 limit_req_status 598;   # 警告请求的返回值限流了
 	}
}

ngnix 动静分离

= :进行普通字符精确匹配,也就是完全匹配。
^~ :表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location。
~ :区分大小写的匹配。
~* :不区分大小写的匹配。
!~ :区分大小写的匹配取非。
!~* :不区分大小写的匹配取非

nginx 调优

# 运行用户(启动者用户名),默认即是nginx,可以不进行设置
user  nginx;
# Nginx 进程数,一般设置为和 CPU 核心数二倍
worker_processes  1;
# Nginx 的错误日志存放目录
error_log  logs/error.log warn;
# Nginx 服务启动时的 pid 存放位置
pid        logs/nginx.pid;

events {
	# 工作模型:使用epoll的I/O模型(如果你不设置、不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
    use epoll;
    # 每个进程允许最大并发数(打开的文件数限制)需要设置"ulimit -n 65536"
    worker_connections 1024;
}
# 配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
http {
    # 设置日志模式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
	# Nginx访问日志存放位置
    access_log  /var/log/nginx/access.log  main;
	# 开启高效传输模式
    sendfile            on;
    # 减少网络报文段的数量
    tcp_nopush          on;
    tcp_nodelay         on;
    # 保持连接的时间,也叫超时时间,单位秒
    keepalive_timeout   65;
    types_hash_max_size 2048;

	# 文件扩展名与类型映射表
    include             /etc/nginx/mime.types;
    # 默认文件类型
    default_type        application/octet-stream;
	# 加载子配置项
    include /etc/nginx/conf.d/*.conf;

    # 配置后端服务器,进行负载均衡配置,可以多个upstream
    upstrean houduan {
    	server 127.0.0.1:8080;
    }

    server {
    	# 配置监听的端口
        listen       80;
        # 配置的域名
        server_name  localhost;

        location / {
       		# 网站根目录
            root   /usr/share/nginx/html;
            # 默认首页文件
            index  index.html index.htm;
            # 禁止访问的ip地址,可以为all
            deny 172.168.22.11;
            # 允许访问的ip地址,可以为all
            allow 172.168.33.44;
            # 请求的后端代理,实际地址位于upstream
            proxy_pass http:houduan;
    	}
    # 默认50x对应的访问页面
    error_page 500 502 503 504 /50x.html;
    # 同上
    error_page 400 404 error.html;
    }
}

nginx 将动态资源与静态资源请求分离

相关配置参数

# 启用缓存到本地的功能
proxy_store on;
# 用户读写权限
proxy_store_access user:rw group:rw all:rw
# 文件缓存路径,与url一致
proxy_temp_path 缓存目录;
# 本地缓存文件配置后,还需要以下配置才能避免请求去远端取文件
if( !e $request_filename ){ # 判断本地缓存是否存在该资源
	proxy_pass http://ip;	# 源服务器的地址,默认端口80,如果不是80需要指明
}

nginx 中具体配置

location ~*\.(gif|jpg|png|bmp|jpeg)$ {		# 代理请求静态资源的正则匹配请求
       		# 浏览器缓存过期时间
       		expires 3d;
       		proxy_set_header Accept-Encoding '';
       		# 服务器的资源文件目录
            root   /home/images/nginx;
            # 启用缓存到本地的功能
			proxy_store on;
			# 用户读写权限
			proxy_store_access user:rw group:rw all:rw
			# 文件缓存路径,与url一致
			proxy_temp_path /home/images/nginx;
            # 本地缓存文件配置后,还需要以下配置才能避免请求去远端取文件
            if( !e $request_filename ){ # 判断本地缓存是否存在该资源
                proxy_pass http://ip;	# 源服务器的地址,默认端口80,如果不是80需要指明
            }
    	}

nginx 热备

  1. 安装 keepalived

    yum install nginx keepalived pcre-devel -y

  2. vim keepalived.conf 配置 nginx 双活热备(同一网段)

    global_defs {
    	vrrp_grap_interval 0
    	vrrp_gna_interval 0
    }
    vrrp_instance VI_1 {	#VI_1 vrrp实例组组名(master和slave保持一致)
    	state MASTER    # 备用机写BACKUP
    	interface ens33 #网卡名称
    	virtual_router_id 50 	#50:vrrp组的编号(master和slave保持一致)
    	priority 100 # 参数 备用机设置为比主机低就可以
    	advert_int 1
    	authentication {
    		auth_type PASS	#授权类型(pass
    		auth_pass 1111	#组密码(组件集群时,密码必须一致)
    	}
    	virtual_ipaddress {
    		虚拟一个同网段ip,如192.168.56.120	#VIP,虚拟的IP地址,需要与集群中的网段保持一致
    	}
    }
  3. vim nginx.conf

    # 配置服务器的热备
    upstrean houduan {
        server 127.0.0.1:8080;
        server 127.0.0.1:8080 backup;# 8080宕机,该服务会充当主机
    }

nginx 安全认证

nginx 安全认证中文介绍

htpasswd 相关介绍

  1. htpasswd 生成密码文件

    yum install httpd-tools -y

  2. htpasswd 生成 nginx 密码文件(用户名不要使用 user_password)

    htpasswd -bc /usr/local/nginx/nginx-1.18.0/conf/nginxpasswd test 123123

    若要在已有 nginx 密码文件追加用户

    htpasswd -b /usr/local/nginx/nginx-1.18.0/conf/nginxpasswd test1 123123

  3. nginx 配置

    location / {
    	# 添加以下两行
        auth_basic "Restricted";
        auth_basic_user_file /usr/local/nginx/nginx-1.18.0/conf/nginxpasswd;
    }

文章作者: 高红翔
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 高红翔 !
  目录