Nginx
在hosts中设置192.168.43.65 qingmangmall.com
利用nginx转到网关(记得关防火墙)
1、Nginx+网关+openFeign的逻辑
要实现的逻辑:本机浏览器请求qingmangmall.com,通过配置hosts文件之后,那么当你在浏览器中输入qingmangmall.com的时候,相当于域名解析DNS服务解析得到ip 192.168.56.10,也就是并不是访问java服务,而是先去找nginx。什么意思呢?是说如果某一天项目上线了,qingmangmall.com应该是nginx的ip,用户访问的都是nginx
请求到了nginx之后,
-
如果是静态资源
/static/
直接在nginx服务器中找到静态资源直接返回。 -
如果不是静态资源/(他配置在
/static/
的后面所以才优先级低),nginx把他upstream转交给另外一个ip192.168.56.1:88
这个ip端口是网关gateway
。-
(在upstream的过程中要注意配置
proxy_set_header Host $host;
)
-
到达网关之后,通过url信息断言判断应该转发给nacos中的哪个微服务(在给nacos之前也可以重写url),这样就得到了响应
而对于openFeign,因为在服务中注册了nacos的ip,所以他并不经过nginx
2、Nginx配置文件
nginx.conf:
-
全局块:配置影响nginx全局的指令。如:用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process故障等
-
events块:配置影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
-
http块:
-
http全局块:配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。错误页面等
-
server块:这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的。每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
-
location1:配置请求的路由,以及各种页面的处理情况
-
location2
-
-
3、Nginx+网关配置
-
修改主机hosts,映射
qingmangmall.com
到192.168.56.10。关闭防火墙 -
修改nginx/conf/nginx.conf,将
upstream
映射到我们的网关服务
upstream qingmangmall{ # 88是网关 server 192.168.56.1:88; }
-
修改nginx/conf/conf.d/qingmangmall.conf,接收到qingmangmall.com的访问后,如果是/,转交给指定的upstream,由于nginx的转发会丢失host头,造成网关不知道原host,所以我们添加头信息
location / { proxy_pass http://qingmangmall; proxy_set_header Host $host; }
配置gateway为服务器,将域名为**.qingmangmall.com转发至商品服务。配置的时候注意 网关优先匹配的原则,所以要把这个配置放到后面
- id: qingmangmall_host_route uri: lb://qingmangmall-product predicates: - Host=**.qingmangmall.com
nginx最后的配置内容:
conf.d/qingmangmall.conf
监听来自qingmangmall:80的请求,
-
对于以/static开头的请求,就是找 /usr/share/nginx/html这个相对路径。
-
为什么找那个?因为我们映射了docker外面的/mydata/data/nginx/html某一列到这个目录,所以在docker中就是去这找静态资源
-
-
其他的请求,转发到http://qingmangmall 这个upstream ,并且由于nginx的转发会丢失host头,造成网关不知道原host,所以我们添加头信息
-
转到upstream了,在nginx.conf配置了相关内容
server { listen 80; server_name qingmangmall.com *.qingmangmall.com; location /static { root /usr/share/nginx/html; } #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; location / { proxy_pass http://qingmangmall; proxy_set_header Host $host; }
nginx.conf
在这里最重要的是这个再转给网关的配置
upstream qingmangmall{ # 88是网关 server 192.168.56.1:88; } include /etc/nginx/conf.d/*.conf; # 包含了哪些配置文件 }
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; 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 /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; upstream qingmangmall{ # 88是网关 server 192.168.56.1:88; } include /etc/nginx/conf.d/*.conf; # 包含了哪些配置文件 }
conf.d/default.conf
这个文件我们用不到
server { listen 80; server_name localhost; # 监听localhost:80请求,我们用不到 #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; }
测试:http://qingmangmall.com/api/product/attrgroup/list/1
http://localhost:88/api/product/attrgroup/list/1
请求结果相同
此时请求接口和请求页面都是qingmangmall.com
五、压力测试
JVM参数、工具、调优笔记:【JVM】压力测试与调优_努力充实,远方可期-CSDN博客