这两篇先看下
nginx的root & index
Nginx之坑:完全理解location中的index,配置网站初始页
反向代理实例
1、实现效果
使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中
nginx 监听端口为 9001,
访问 http://192.168.17.129:9001/a/ 直接跳转到 127.0.0.1:8080
访问 http:// 192.168.17.129:9001/b/ 直接跳转到 127.0.0.1:8081
就是centos7安装两个tomcat,两个webapps下分别有a,b两个文件夹,分别有a,b两个html文件,分别显示8080,8081.
效果如下,物理机输入以下地址分别能访问到这些页面。
2、准备工作
1.准备好两个tomcat,端口不同,有html文件
2.准备监听端口跳转
修改config
service改成如下
server {
listen 9001;
server_name localhost;
#匹配任何以 /a/ 开头的地址
location ~/a/ {
proxy_pass http://127.0.0.1:8080;
}
location ~/b/ {
proxy_pass http://127.0.0.1:8081;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
配置完,访问后及时url其实是从http://192.168.128.130:9001变成http://127.0.0.1:8080
正向代理
location /whatsapp/ {
proxy_pass https://graph.facebook.com/;
proxy_ssl_server_name on;
proxy_set_header Host graph.facebook.com;
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cookie_domain graph.facebook.com $server_name;
}
请求http://ip:端口/whatsapp/v20.0/106540352242922/messages
会转发到https://graph.facebook.com/v20.0/106540352242922/messages
server {
listen 8002;
location / {
proxy_pass https://graph.facebook.com/;
proxy_set_header Host graph.facebook.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Connection '';
proxy_buffering off;
proxy_cache off;
}
location /AI-LINE {
proxy_pass https://api.line.me/;
proxy_set_header Host api.line.me;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Connection '';
proxy_buffering off;
proxy_cache off;
}
location /telegram {
proxy_pass https://api.telegram.org/;
proxy_set_header Host api.telegram.org;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Connection '';
proxy_buffering off;
proxy_cache off;
}
}
上面这个也可以实现,实现监听http://127.0.0.1:8002/whatapp转到
https://graph.facebook.com/whatapp
下面这个
负载均衡
1、实现效果
(1)浏览器地址栏输入地址 http://192.168.128.130/a/a.html,负载均衡效果,平均 8080
和 8081 端口中
2、准备工作
(1)准备两台 tomcat 服务器,一台 8080,一台 8081
(2)在两台 tomcat 里面 webapps 目录中,创建名称是 a 文件夹,在a 文件夹中创建
页面 a.html,用于测试
3、在 nginx 的配置文件中进行负载均衡的配置
以下用的是轮询方式
轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器down掉后,能自动剔除。
#上游配置
upstream myserver{
server 192.168.128.130:8080;
server 192.168.128.130:8081;
}
server {
listen 80;
server_name 192.168.128.130;
location /{
#跳转的是上面我们的上游地址
proxy_pass http://myserver;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
4、测试
发现每次访问都会去不同的服务器。
nginx 分配服务器策略
第一种 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
第二种 weight
weight 代表权重默认为 1,权重越高被分配的客户端越多
第三种 ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,解决session共享问题
第四种 fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
动静分离
服务端接收来自客户端的请求中,有一部分是静态资源的请求,例如html,css,js和图片资源等等,有一部分是动态数据的请求。因为tomcat处理静态资源的速度比较慢,所以我们可以考虑把所有静态资源独立开来,交给处理静态资源更快的服务器例如nginx处理,而把动态请求交给tomcat处理。
如下图所示,我们在机器上同时安装了nginx和tomcat,把所有的静态资源都放置在nginx的webroot目录下面,把动态请求的程序都放在tomcat的webroot目录下面,当客户端访问服务端的时候,如果是静态资源的请求,就直接到nginx的webroot目录下面获取资源,如果是动态资源的请求,nginx利用反向代理的原理,把请求转发给tomcat进行处理,这样就实现了动静分离,提高了服务器处理请求的性能。
nginx常见错误
413 Request Entity Too Large
1. 调整 client_max_body_size
参数
修改 Nginx 配置文件,增加或调整 client_max_body_size
参数,设置允许的最大请求体大小。你可以在 http
、server
或 location
块中设置该参数。
http {
client_max_body_size 20M;
# 其他配置...
}
server {
listen 8002;
location / {
client_max_body_size 20M; # 允许最大20MB的请求体
proxy_pass http://your_backend_server;
# 其他配置...
}
}
上述配置中的 client_max_body_size 20M;
表示允许的最大请求体为 20MB。
2. 重启nginx
nginx -s reload