一. Nginx作用
1. 反向代理
正向代理(出):localhost -> proxy -> google
反向代理(入):request -> Nginx -> Tomcat
2. 负载均衡
多台Tomcat服务器。
第一,通过upstream来定义一组Tomcat,并指定负载策略(IPHASH、加权论调、最少连接),健康检查策略(Nginx可以监控这一组Tomcat的状态)等。
第二,将proxy_pass替换成upstream指定的值即可
3. 缓存/动静分离
加快访问速度的机制,说白了,在配置上就是一个开启,同时指定目录,让缓存可以存储到磁盘上。
静态资源在 nginx static 目录。
动态资源在项目 resources - templates 目录。
4. 跨域问题
二. Nginx配置
conf.d/gulimall.conf 监听来自gulimall:80的请求
1)对于以/static开头的请求,就是找 /usr/share/nginx/html这个相对路径。因为我们映射了docker外面的/mydata/data/nginx/html某一列到这个目录,所以在docker中就是去这找静态资源。
2)对于其他请求,转发到http://gulimall 这个upstream ,并且由于nginx的转发会丢失host头(host头是HTTP1.1开始新增的请求头),造成网关不知道原host,所以我们添加头信息。
server {
listen 80;
server_name gulimall.com *.gulimall.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://gulimall;
proxy_set_header Host $host; #
}
upstream gulimall{
# 88是网关
server 192.168.56.1:88;
}
include /etc/nginx/conf.d/*.conf; # 包含了哪些配置文件
}
nginx.conf
分为/static拦截和/拦截,将/拦截转发到upstream gulimall即可,转发时代上请求头。
Nginx的原理其实就是 NIO-select/read+线程池 。
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;
include /etc/nginx/conf.d/*.conf; # 包含了哪些配置文件
}