Nginx的一些基本知识点 Posted on 2024-12-21 11:06:22 2024-12-21 11:06:22 by Author 摘要 个人看了Nginx官网,自己总结个人觉得比较重要的Nginx知识点。 # Nginx的一些基本知识点 1. Nginx解决的问题 - Nginx是一个高性能的HTTP和反向代理服务器,同时也支持POP3/SMTP协议的代理服务器。 - 反向代理的含义以及特点 - 客户端的请求转发到后端服务器,进行负载均衡处理,使得减少服务器的压力,提高系统的整体处理能力和可靠性。 - 反向代理可以隐藏后端服务器的真实IP和其他细节处理,增加服务器的安全性。 - 反向代理可以缓存一些静态的内容,在客户端请求时候,可以减少对后端服务器的请求,直接返回代理服务器的静态内容,加快相应速度,减少服务器的压力。 - 反向代理可以支持HTTP,HTTPS和WebSocket协议,为不同服务提供统一的接入点。 2. Nginx一些可执行的命令 - nginx -s singal(其中singal可以是stop,quit,reload, reopen) - nginx -s stop:该命令立即停止nginx进程,强制关闭。不够优雅,不能等待所有的工作进程完成任务。 - nginx -s quit:这个命令会优雅的停止nginx进程,向所有工作进程发送信号,要求他们完成当前请求然后退出。 - nginx -s reload:这个命令在修改配置文件后,重新向主进程发送一个信号,重新启动使用新配置文件。 - nginx -s reopen: 这个命令重新打开日志文件,以便继续记录日志。 3. 配置一个简单的静态内容和反向代理服务器 - ```nginx server { listen 80 location / { root /data/www; } location /images/ { root /data; } } ``` 以上配置,默认监听80端口,对于以 /images/ 开头的 URI 请求,服务器将发送 /data/images 目录中的文件。 例如,在响应 http://localhost/images/example.png 请求时,nginx 将发送 /data/images/example.png 文件。 如果该文件不存在,nginx 将发送一个 404 错误的响应。 URI不以/images/开头的请求将被映射到/data/www目录。 例如,在响应 http://localhost/some/example.html 请求时,nginx 将发送 /data/www/some/example.html 文件。 - ```nginx server { location / { proxy_pass http://localhost:8080; } location ~ \.(gif|jpg|png)$ { root /data/images; } } ``` 第一个位置块中,放入 proxy_pass 指令,并在参数中指定代理服务器的协议、名称和端口(在本例中为 http://localhost:8080)这个块匹配所有以根路径`/`开始的请求。`proxy_pass`指令将这些请求转发到`http://localhost:8080`,这意味着Nginx会作为一个反向代理,将客户端的请求传递给运行在本地8080端口的服务器。这个配置适用于将Nginx作为前端服务器,后端服务器运行在同一台机器的不同端口上。 第二个`location`指令告诉Nginx,对于所有以`.gif`、`.jpg`或`.png`结尾的请求,Nginx应该在`/data/images`目录下查找相应的文件并提供服务。例如,如果客户端请求`/example.jpg`,Nginx会在`/data/images/example.jpg`路径下查找文件并提供服务。 - 配置HTTPS服务器 - ```nginx server { listen 80; listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ... } ``` - 服务器证书是一个公共实体。 它会发送给连接服务器的每个客户端。 私钥是一个安全实体,应存储在限制访问的文件中,但nginx主进程必须能读取它。 私钥也可以与证书存储在同一文件中。这个`server`块配置了一个Nginx服务器,它同时处理HTTP和HTTPS请求,为域名`www.example.com`提供服务。对于HTTPS请求,它使用指定的SSL证书和私钥,并配置了允许的SSL/TLS协议版本和加密套件 4. 使用Nginx作为HTTP负载均衡器 - nginx用作高效的HTTP负载平衡器,将流量分配给多个应用服务器,并通过nginx提高网络应用的性能、可扩展性和可靠性。它提供了三种负载均衡策略。 1. 轮询法:向应用服务器发出的请求以循环方式分配服务器去处理请求。 2. 最少连接数:下一个请求被分配到连接数最少的活动服务器上去处理。 3. ip-hash方法:使用hash方法,将ip分配到到一个固定的服务器上去处理请求。这种方式保证同一个IP多次请求可以分配到同一个服务器上(前提该服务器是活跃的)。以下是一个实例:展示了多个服务器处理请求选用的负载均衡策略。 ```nginx http { upstream myapp1 { least_conn;(可选:ip_hash,默认方式是轮询) server srv1.example.com; server srv2.example.com; server srv3.example.com; } server { listen 80; location / { proxy_pass http://myapp1; } } } ``` 4. 加权负载均衡 ```nginx upstream myapp1 { server srv1.example.com weight=3; server srv2.example.com; server srv3.example.com; } ``` 假如5个人请求过来,服务器srv1会处理3个请求,其余两个服务器会分别处理其他的2个请求。(3/5的请求分配到服务器srv1了)。 5. 健康检测机制: 1. 如果某个服务器的响应出现错误,nginx 会将该服务器标记为失败,并在一段时间内尽量避免选择该服务器处理后续入站请求。 2. 其中有两个重要参数:max_fails是在一段时间内与服务器通信的请求连接失败的尝试次数,默认为1。如果在这个时间段内失败的次数达到了`max_fails`设定的值,Nginx会认为该后端服务器不可用,并在接下来的`fail_timeout`时间段内不再向其发送请求。 fail_timeout:有两个要点 一是Nginx在认为后端服务器不可用之前,会观察`max_fails`次失败的时间段;二是一旦服务器被标记为不可用,Nginx会在`fail_timeout`时间段内不再尝试连接该服务器。 ```nginx upstream backend { server backend1.example.com max_fails=3 fail_timeout=30s; server backend2.example.com max_fails=3 fail_timeout=30s; } ``` 在这个例子中,Nginx会在30秒内观察与每个后端服务器的通信,如果在这段时间内失败了3次,Nginx会认为该服务器不可用,并在接下来的30秒内不再向其发送请求。30秒后,Nginx会再次尝试连接该服务器,以检查其是否已经恢复可用。通过这种方式,Nginx可以动态地调整其负载均衡策略,避免向不可用的后端服务器发送请求,从而提高系统的整体可用性和稳定性。 > 参考:nginx官网:https://nginx.p2hp.com/en/docs/index.html
{{ item.content }}
{{ child.content }}