ngnix反向代理+负载均衡+缓存+动静分离实战

nginx

原理

多线程/进程:

nginx由master和worker支撑运行,maser只有一个,worker可以有多个,建议与cpu核数相同,master管理worker的启动,关闭、运行,以及监听端口,worker负责处理请求,此工作模式使得nginx有好的处理请求的能力

异步非阻塞I/O:

nginx的处理能力与其接受和处理方式有很大的关系,当worker处理一个请求时遇到I/O操作时(比如磁盘读取,存储),worker不会一直等待,而是会将其挂起,继续处理下一个请求,当I/O操作完毕时,通过事件通知机制将唤醒处理逻辑,这种方式避免了线程或进程的阻塞,大大提高了系统并发处理能力

事件驱动机制:

当新的请求出现时,使用操作系统高效的事件驱动机制(如 Linux 下的 epoll、FreeBSD 下的 kqueue 等),使得nginx的响应时间极快,是事件的高并发处理的原因 之一

nginx特点

轻量级:

相比一些传统的 Web 服务器,Nginx 的代码占用资源少,安装包体积小,对系统资源(如内存、CPU 等)的消耗较低 ,在低配置的服务器上也能高效稳定地运行。

高性能:

Nginx采用异步非阻塞的事件驱动模型,能够同时处理大量的并发连接,具备出色的高并发处理能力。在高并发场景下,能快速响应请求,减少请求的等待时间,保证服务的流畅性。

模块化设计

拥有丰富的模块,涵盖了负载均衡、缓存、安全等各个方面,用户可以根据实际需求灵活选择和配置模块,便于扩展 Nginx 的功能,适应不同的业务场景。

跨平台性

支持在多种操作系统上安装和运行,如 Linux、Windows、macOS、FreeBSD 等,这使得它能够在不同的环境中广泛应用。

nginx优点

强大的反向代理能力:

通过反省代理将客户端的请求分配到后端的服务器集群,很好的做到了负载均衡,并且隐藏了主服务器的IP,提高了服务的稳定性和安全性

高效的静态资源处理:

对于静态资源(HTML、CSS、JavaScript、)时,nginx可以直接响应,无需通过应用程序进行加载,并且可以通过缓存机制,进一步减少了磁盘I/O进程的堵塞,提高了nginx的响应效率

强大的UIL匹配能力:

nginx可以使用正则表达式进行匹配UIL规则,并且通过不同的UIL返回不同的WEB或则资源,方便nginx的UIL的规划和功能定制

高效稳定的性能:

nginx的高效处理能力、和反向代理能力使得其在高可用场景下也可以满足需求

nginx目录结构

/usr/share/nginx/html 默认html文件路径

/etc/nginx/nginx.conf 默认主配置文件

/etc/nginx/conf.d 默认子配置文件路径

/var/log/nginx/error.log 错误日志文件

/etc/nginx/modules 模块

/usr/sbin/nginx 执行命令文件

server块基本模型

server {

listen 80; # 监听 80 端口(HTTP)

server_name example.com; # 绑定的域名

root /var/www/html; # 网站文件根目录

index index.html; # 默认首页文件

# 处理静态文件请求

location / {

try_files $uri $uri/ =404; # 尝试访问文件,不存在则返回 404

}

# 错误页面配置

error_page 404 /404.html;

error_page 500 502 503 504 /50x.html;

}

反向代理模型

server {

listen 80;

server_name example.com

;

location / {

proxy_pass http://backend_server; # 转发到后端服务器组

proxy_set_header Host $host; # 设置请求头中的Host字段

proxy_set_header X-Real-IP $remote_addr; # 设置真实客户端IP

}

}

https模型

server {

listen 443 ssl; # 监听443端口,并开启SSL

server_name example.com www.example.com;

ssl_certificate /path/to/your.crt; # SSL证书文件路径

ssl_certificate_key /path/to/your.key; # SSL证书私钥文件路径

# 其他配置项与HTTP类似

}

nginx配置灵活性

一台(多台)服务器,多个端口

server {

listen 80;

server_name 192.168.80.142;

location / {

root /usr/share/nginx/html;

index index.html;

}

}

server {

listen 81;

server_name 192.168.80.142;

location / {

root /usr/share/nginx/html;

index index2.html;

}

}

一台(多台)服务器,多个IP(虚拟IP)

server {

listen 80;

server_name 192.168.80.142;

location / {

root /usr/share/nginx/html;

index index.html;

}

}

server {

listen 80;

server_name 192.168.80.143;

location / {

root /usr/share/nginx/html;

index index2.html;

}

}

一台(多台)服务器,多个域名

server {

listen 80;

server_name www.tq.com;

location / {

root /usr/share/nginx/html;

index index.html;

}

}

server {

listen 80;

server_name www.tq.com;

location / {

root /usr/share/nginx/html;

index index2.html;

}

}

若没有申请域名则需要在hosts文件配置域名解析

这中多样性使得nginx的架构和资源管理变得十分方便

location

匹配规则

= 精确匹配

^~ 匹配url的路径

~ 区分大小写的正则表达式匹配(也可以使用!取反)

~* 不分大小写的正则表达式匹配(同上)

= 的优先级最高,匹配到后不在匹配其他location

首先匹配 =,其次匹配^~,其次是按文件中顺序的正则匹配,最后是交给 /通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

root 和alias的区别

location中的root会将 客户端匹配到的路径拼接

比如

server {

listen 80;

server_name 192.168.80.142;

location /html {

root /usr/share/nginx/;

}

}

此时,客户端请求的index.html就会与roo

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容