本文主要内容:
-
Nginx 是什么
-
它能在哪些场景下运用
-
上手根底装备
Nginx 是什么
-
Nginx是一款轻量级的Web服务器、反向署理服务器
-
规划思维类似 NodeJS,根据事情驱动的异步非阻塞处理
-
由于它的内存占用少,发动极快,高并发能力强,经常用于服务端的反向署理和负载均衡。
web服务器:负责处理和呼应用户恳求,一般也称为http服务器,如 Apache、IIS、Nginx
应用服务器:存放和运行体系程序的服务器,负责处理程序中的事务逻辑,如 Tomcat、Weblogic、Jboss(现在大多数应用服务器也包含了web服务器的功能)
署理是什么?
先上结论:正向署理躲藏实在客户端,反向署理躲藏实在服务端
-
首先说说正向署理,举个:A 找 C 借一笔钱,但两人关系不熟,必定难借到。所以 A 就找 B 出头,因为 BC 是好朋友,很顺利的拿到钱了。这个例子中 B 向 C 躲藏了真正的借钱人,相当于正向署理。
-
VPN 也是一个正向署理的例子
- 反向署理在生活中也有例子:我要咨询手机通信问题,打电话到 10086,该体系会分配一个客服人员,我并不需求知道对方性别,年龄等因素,但他们都能提供给我专业服务。10086 总机对我躲藏了服务人员信息,相当于一个反向署理
Nginx 能够处理什么问题
-
反向署理,负载均衡。包含处理前端跨域问题
-
静态资源服务
-
API 服务,如OpenResty …
根底运用
常用信息
-
查看 Nginx 信息
brew info nginx
-
常用文件途径(留意,以下为 M1 Mac 装备)
-
装置途径:
/opt/homebrew/Cellar/nginx/1.23.0
-
默认装备途径:
/opt/homebrew/etc/nginx/nginx.conf
常见操作命令
-
发动:ngxin
-
热重启:nginx -s reload
-
停止:nginx -s stop
-
强制停止:pkill -9 nginx,或者:
-
ps -ef | grep nginx
-
kill nginx: master [port]
-
kill -QUIT [port]
-
进程装备
worker_processes 8; # Nginx 进程数,主张按照CPU数目来指定,一般为它的倍数 (如:2个四核的CPU计为8)
worker_rlimit_nofile 65535; #一个Nginx 进程翻开的最多文件描述符数目
worker_connections 65535;#每个进程答应的最多衔接数
http 相关装备
http {
sendfile on # 高效传输文件的模式 一定要开启
keepalive_timeout 65 # 客户端服务端恳求超时时刻
# 直接恳求nginx也是会报跨域过错,这儿设置答应跨域
# 假如署理地址已经答应跨域则不需求这些, 不然报错(尽管这样nginx跨域就没含义了)
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
}
监听端口
server 模块是 http 模块中的一个子模块,用来定义一个虚拟拜访主机。
当 ng 接纳到恳求后,会匹配 server 模块。
server {
listen 80; # 监听端口
server_name dev1-cd.hongsong.club; # 域名 Host
# path
location / {
proxy_pass http://127.0.0.1:10086/; # 署理装备
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
上面的装备表示:当恳求 samdd.club 时,会射中 Nginx 服务器 server 装备,署理到本地服务
server {
listen 80; #监听端口
server_name www.mingongge.com; #域名 Host 信息
location / {
root /www/www; #网站根目录
index index.html index.htm; #默认首页类型
deny 192.168.2.11; #禁止拜访的ip地址,能够为all
allow 192.168.3.44; #答应拜访的ip地址,能够为all
}
}
静态资源装备
server {
listen 80;
server_name mingongge.com;
location /static {
root /wwww/web/web_static_site;
}
}
反向署理
-
当出产环境中不同的项目在同一台服务器上,就能够用反向署理去做恳求转发。
-
在前端本地开发,也会遇到浏览器跨域问题,能够用 Nginx 转发恳求
http {
...
upstream product_server{
127.0.0.1:8081;
}
upstream admin_server{
127.0.0.1:8082;
}
upstream test_server{
127.0.0.1:8083;
}
server {
#默认指向 product_server
location / {
proxy_pass http://product_server;
}
location /product/{
proxy_pass http://product_server;
}
location /admin/ {
proxy_pass http://admin_server;
}
location /test/ {
proxy_pass http://test_server;
}
}
}
负载均衡
upstream server_pools {
# weigth 参数表示权重:权重越高,被分配到的几率越大
server 192.168.1.13:8989 weight=6;
server 192.168.1.11:8880 weight=5;
server 192.168.1.12:9990 weight=1;
}
server {
listen 80;
server_name samdd.com;
location / {
proxy_pass http://server_pools;
}
}
其他署理装备
proxy_connect_timeout 90; # nginx跟后端服务器衔接超时时刻(署理衔接超时)
proxy_send_timeout 90; # 后端服务器数据回传时刻(署理发送超时)
proxy_read_timeout 90; # 衔接成功后,后端服务器呼应时刻(署理接纳超时)
proxy_buffer_size 4k; # 署理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; # proxy_buffers缓冲区
proxy_busy_buffers_size 64k; # 高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; # 设定缓存文件夹大小
proxy_set_header Host $host;
proxy_set_header X-Forwarder-For $remote_addr; # 获取开始发起恳求的客户端 IP 地址
proxy_set_header X-Real-IP $remote_addr; # 获取客户端实在IP
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-
proxy_add_x_forwarded_for 变量包含客户端恳求头中的 X-Forwarded-For ,与remote_addr用逗号分隔,假如没有 X-Forwarded-For 恳求头,则 proxy_add_x_forwarded_for等于remote_addr
-
$remote_addr 变量的值是客户端的 IP
处理浏览器跨域
#进程, 可更具cpu数量调整
worker_processes 1;
events {
#衔接数
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#衔接超时时刻,服务器会在这个时刻过后封闭衔接。
keepalive_timeout 10;
# gizp紧缩
gzip on;
# 直接恳求nginx也是会报跨域过错的这儿设置答应跨域
# 假如署理地址已经答应跨域则不需求这些, 不然报错(尽管这样nginx跨域就没含义了)
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
# srever模块装备是http模块中的一个子模块,用来定义一个虚拟拜访主机
server {
listen 80;
server_name localhost;
# 根途径指到index.html
location / {
root html;
index index.html index.htm;
}
# localhost/api 的恳求会被转发到192.168.0.103:8080
location /api {
rewrite ^/b/(.*)$ /$1 break; # 去除本地接口/api前缀, 不然会呈现404
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.0.103:8080; # 转发地址
}
# 重定向过错页面到/50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
Link
Nginx 常用装备汇总!从入门到干活足矣
Nginx处理前端跨域
反向署理为何叫反向署理?- 知乎