Nginx学习笔记
目录
- 1.相关概念
- 2.正向代理和反向代理
- 2.1正向代理
- 2.2反向代理
- 3.负载均衡和动静分离
- 3.1负载均衡
- 3.2动静分离
- 4.使用二进制包安装nginx
- 5.Nginx的启停
- 6.Nginx配置文件介绍
- 7.Nginx的高可用集群
- 8.原理
- 8.1mater 和 worker
1.相关概念
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
2.正向代理和反向代理
2.1正向代理
如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。即正向代理隐藏客户端。
2.2反向代理
只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返 回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址。即反向代理隐藏服务器端。
3.负载均衡和动静分离
3.1负载均衡
- 通过Nginx,将原先请求集中到单个服务器上的 情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
3.2动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。就是把动态的资源放到专门的服务器,静态的放到别的的专门的服务器,客户访问的时候由nginx进行请求的转发。
什么是动态资源,什么是静态资源
静态资源,内容固定不变,直接以文件形式存储在服务器上,无需服务器端实时生成。常见类型的有前端文件,前端文件。动态资源,内容由服务器实时生成,常见类型的有动态页面和API接口。
4.使用二进制包安装nginx
- 1.下载nginx二进制包(地址:https://nginx.org/en/download.html)
- 2.解压,安装
#安装依赖yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
# 解压安装包
tar -zxvf nginx-1.28.0.tar.gz
# 编译
./configure --prefix=指定目录
make && make install
- 3.添加环境变量
echo 'export PATH=$PATH:指定目录/sbin' >> ~/.bashrc
source ~/.bashrc
5.Nginx的启停
# 启动
nginx
# 停止
nginx -s stop
# 重新加载 nginx
nginx -s reload
6.Nginx配置文件介绍
#user nobody; # 运行Nginx的用户(默认nobody,建议改为专用用户如www-data)
worker_processes 1; # 工作进程数(通常设为CPU核心数,如4核设为4),worker_processes auto; 可自动匹配CPU核心数。#error_log logs/error.log; # 错误日志路径(可设置级别:notice, info, warn, error)
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid; # 存储主进程PID的文件路径events {worker_connections 1024; # 单个工作进程的最大连接数# multi_accept on; # 是否允许一个进程同时接受多个连接(默认off)# use epoll; # Linux高性能事件模型(默认自动选择)
}http {include mime.types; # 引入MIME类型文件(定义文件扩展名与Content-Type的映射)default_type application/octet-stream; # 默认响应类型(未知类型时作为二进制流处理)# 访问日志路径及格式,$remote_addr:客户端IP。$request:请求方法(如 GET / HTTP/1.1)。$status:响应状态码(如200、404)。#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;sendfile on; # 启用高效文件传输模式(零拷贝技术),传统文件传输需要在内核态和用户态之间多次拷贝数据,而 sendfile 允许 Nginx 直接在内核空间将文件内容发送到网络套接字,跳过用户态的拷贝,减少 CPU 和内存开销。#tcp_nopush on; # 当 sendfile 启用时,tcp_nopush 会等待数据包填满一个 MSS(最大报文段大小)后再发送,减少小包的数量。#keepalive_timeout 0; 设置客户端与服务器之间的 TCP 长连接保持时间(单位:秒)。keepalive_timeout 65;#gzip on; 启用 Gzip 压缩,减少传输数据量,节省带宽。server {listen 80; # 监听80端口server_name localhost; # 服务器域名(可配置多个,如 example.com *.example.com)(_代表允许所有的域名)#charset koi8-r;#access_log logs/host.access.log main;location / {root html; # 网站根目录(相对路径为Nginx安装目录下的html/)index index.html index.htm; # 默认首页文件}#error_page 404 /404.html; # redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html; # 自定义错误页面location = /50x.html {root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server {# listen 443 ssl;# server_name localhost;# ssl_certificate cert.pem; SSL证书路径# ssl_certificate_key cert.key; 私钥路径# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#}}
listen和server_name的区别: listen定义服务器块监听的 IP 地址和端口。如果省略 listen,Nginx 会默认监听 0.0.0.0:80(IPv4)或 [::]:80(IPv6)。定义服务器块的 域名(Host头),用于区分不同网站的请求。
7.Nginx的高可用集群
8.原理
8.1mater 和 worker
nginx 启动后,是由两个进程组成的。master(管理者)和worker(工作者)。一个nginx 只有一个master。但可以有多个worker
Nginx 同 redis 类似都采用了 io 多路复用机制,每个 worker 都是一个独立的进程,但每个进 程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话 下。每个 worker 的线程可以把一个 cpu 的性能发挥到极致。所以 worker 数和服务器的 cpu 数相等是最为适宜的。设少了会浪费 cpu,设多了会造成 cpu 频繁切换上下文带来的损耗。