Nginx基本配置(中级)

2023-11-05

(一)nginx反向代理

(1)什么是反向代理

  • 反向代理:使用代理服务器接受Internet上的请求,将请求转发给内部服务器,将内部服务器响应结果返回给Internet上请求的客户端。
  • 正向代理:客户端无法访问Internet时,通过访问正向代理服务器(可与客户端、Internet连通),再由正向代理服务器访问Internet,获取响应结果后返回给客户端。
  • 正向代理与反向代理区别:
正向代理 反向代理
代理服务器位置 客户端与服务器都能连接的位置 目标服务器内部
主要作用 屏蔽客户端IP、集中式缓存、解决客户端不能直连服务端的问题 屏蔽服务端IP及内部实现、负载均衡、缓存
应用场景 爬虫、翻墙、maven的nexus服务 Nginx、Apache负载均衡应用

(2)nginx代理配置

  • 访问: http://localhost:8001/job/page
  • 代理到:http://192.168.100.100:9999/page
server {
	listen 8001;
	server_name localhost;
	location /job/ {
		proxy_pass http://192.168.100.100:9999/; # 加上'/'后,代理到的地址会去掉location后面的路径(即:/job/)
	}
}

  • 访问: http://localhost:8001/job/page
  • 代理到:http://192.168.100.100:9999/job/page
server {
	listen 8001;
	server_name localhost;
	location /job/ {
		proxy_pass http://192.168.100.100:9999; # 去掉'/',代理地址会拼接上location后面的路径
	}
}
代理相关参数 参数说明
proxy_pass 代理服务
proxy_redirect off; 是否允许重定向
proxy_set_header Host $host; 传header参数至后端服务,$http_host,$proxy_port,$proxy_host
proxy_set_header X-Forwarded-For $remote_addr; 设置 request header,即客户端IP地址
proxy_connect_timeout 90; 连接代理服务超时时间
proxy_send_timeout 90; 请求发送最大时间
proxy_read_timeout 90; 读取最大时间

(二)nginx负载均衡

upstream backend {
	server 192.168.100.100:9001;
	server 192.168.100.100:9002;
}
server {
	listen 8001;
	server_name localhost;
	
	proxy_connect_timeout 1; # 超时无响应,自动转发到其他服务器
	proxy_send_timeout 1; # 后端服务器数据回传时间
	proxy_read_timeout 1; # 连接成功后_等候后端服务器响应时间
	
	location / {
		proxy_pass http://backend;
	}
}
  • upstream参数说明:
参数名称 参数说明
weight 权重
max_fails 最大失败数,触达则剔除主机
fail_timeout 主机剔除后,重新探测时间,触达后再次按max_fails进行新一轮主机探活,直至主机恢复
backup 备用服务
max_conns 允许最大连接数
ll+weight 轮询加权重(默认)
ip_hash 基于Hash计算,用于session保持,不与backup一同使用
url_hash 静态资源缓存,节约存储,加快速度(第三方)
least_conn 最少链接(第三方)
least_time 最小响应时间,计算节点平均响应时间,然后取响应最快的那个,分配更高权重(第三方)
upstream backend {
	#ip_hash; # 用于会话保持,不与backup一同使用。
	server 192.168.100.100:9001 weight=1 max_fails=1 fail_timeout=5;
	server 192.168.100.100:9002 weight=2;
	server 192.168.100.100:9003 weight=1 backup;
}

(三)nginx缓存

  1. 修改nginx配置文件下http配置块:
http {
	...
	
	proxy_cache_path D:\nginx-1.18.0\proxy_cache\cache levels=1:2 keys_zone=cache:60m max_size=120m inactive=1h use_temp_path=off;

	#缓存临时目录
	proxy_temp_path D:\nginx-1.18.0\proxy_cache\tmp;


	server {
		...
	}
}
  • 参数说明:
参数名称 说明
proxy_cache_path nginx缓存资源的存放路径
levels 缓存文件目录层次;levels=1:2表示两级目录
key_zone 在共享内存中设置一块存储区域来存放缓存的key和metadata(类似使用次数),这样nginx可以快速判断一个request是否命中缓存,1m可以存储8000个key
max_size 最大cache空间,如果不指定,会使用掉所有disk space,当达到配额后,会删除最少使用的cache文件
inactive 未被访问文件在缓存中保留时间,本配置中如果60分钟未被访问则不论状态是否为expired,缓存控制程序会删掉文件。inactive默认是10分钟。需要注意的是,inactive和expired配置项的含义是不同的,expired只是缓存过期,但不会被删除,inactive是删除指定时间内未被访问的缓存文件
use_temp_path 如果为off,则nginx会将缓存文件直接写入指定的cache文件中,而不是使用temp_path存储,official建议为off,避免文件在不同文件系统中不必要的拷贝
  1. 修改反向代理:
location / {
	proxy_cache cache; # 启用缓存,若为off表示关闭缓存
	proxy_cache_key $scheme$proxy_host$request_uri;
	proxy_cache_valid 200 10s;
	proxy_cache_valid 404 2h;
	add_header cache-status $upstream_cache_status; # 变量$upstream_cache_status,表示显示缓存的状态
	proxy_pass http://myserver;
	index index.html index.htm;
}
  • 注意:post请求不会缓存

(四)nginx优化

(1)worker_processes

  • 每个worker进程都是单线程的进程,它们会调用各个配置块以实现多种多样的功能。
  1. 如果模块确认不会出现阻塞式的调用,那么有多少CPU内核就应该配置多少个进程;
  2. 如果有可能出现阻塞式调用,那么需要配置稍多一些的worker进程,一般为CPU核数或2倍;

(2)worker_connections

  • 表示worker进程的最大连接数,默认1024。

  • connections不可随便设置,需与两个重要指标关联:

    1. 内存:
    • 每个连接数分别对应一个read_event、一个write_event事件;
    • 一个连接数大概占用232字节,2个事件总占用96字节,那么一个连接总共占用328字节;
    • 通过数学公式可以算出100000个连接数大概会占用31M(100000*328/1024/1024);
    • 当然这只是nginx启动时,connections连接数所占用的nginx。
    1. 进程最大可打开文件数:
    • 进程最大可打开文件数受限于操作系统,可通过 ulimit -n 命令查询;
    • nginx提供了worker_rlimit_nofile指令,这是除了ulimit的一种设置可用的描述符的方式;
    • 该指令与使用ulimit对用户的设置是同样的效果。此指令的值将覆盖ulimit的值;

    (1)修改系统配置

    vim /etc/security/limits.conf
    
    soft nofile 65535
    hard nofile 65535
    soft nproc 65535
    hard nproc 65535
    
    #退出重新连接 查看
    ulimit -n
    

    (2)nginx配置

    #配置Nginx worker进程最大打开文件数
    worker_rlimit_nofile 65535;
    

    ps -elf | grep nginx 找到nginx的worker进程ID
    cat /proc/1203/limits 查看,其中1203是worker进程ID,请注意其中的Max open files
    在这里插入图片描述
    系统的最大打开文件数>= worker_connections*worker_process

(3)worker_cpu_affinity

  • 绑定Nginx worker进程到指定的CPU内核:
    • 假定每一个worker进程都是非常繁忙的,如果多个worker进程都在抢同一个CPU,那么这就会出现同步问题。
    • 如果每一个worker进程都独享一个CPU,就在内核的调度策略上实现了完全的并发。
    • 仅对Linux操作系统有效

    例如,如果有4颗CPU内核,就可以进行如下配置:

    worker_processes 4;
    worker_cpu_affinity 1000 0100 0010 0001;
    

    例如,如果有8颗CPU内核,就可以进行如下配置:

    worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
    

(4)open_file_cache

  • 为打开文件指定缓存,默认未启用
open_file_cache max=65535 inactive=60s;
参数 说明
max 指定缓存数量,建议和打开文件数一致
inactive 经过多长时间文件没被请求,删除缓存

(5)open_file_cache_valid

  • 多长时间检查一次缓存的有效信息。
open_file_cache_valid 80s;

(6)open_file_cache_min_uses

  • open_file_cache 指令中的 inactive 参数设定的时间内,文件的最少使用次数
open_file_cache_min_uses 1;

(7)优化样例

worker_processes 2;
worker_rlimit_nofile 65535;

events {
    worker_connections  65535;
}

http {
	open_file_cache max=65535 inactive=60s;
	open_file_cache_valid 80s;
	open_file_cache_min_uses 1;
	proxy_cache_path D:\nginx-1.18.0\proxy_cache\cache levels=1:2 keys_zone=cache:60m max_size=120m inactive=1h use_temp_path=off;
	proxy_temp_path D:\nginx-1.18.0\proxy_cache\tmp; #缓存临时目录
	
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx基本配置(中级) 的相关文章

随机推荐