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





















暂无评论内容