1. 动静分离架构图
2. Nginx配置文件
该配置文件可以配置多个域名同一个ip,也就是说二级域名相同,一级域名不同
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
fastcgi_intercept_errors on;
charset utf-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 4k;
large_client_header_buffers 4 32k;
client_max_body_size 300m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
client_body_buffer_size 512k;
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
###2012-12-19 change nginx logs
log_format main '$http_x_forwarded_for - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $request_time $remote_addr';
# 多个域名同一ip才可以生效,也就是说xxx.domain.com 二级域名.domain.com必须相同
upstream a.domain.com {
server 127.0.0.1:8091 weight=1 max_fails=2 fail_timeout=30s;
}
upstream c.domain.com{
server 61.135.169.125:80 weight=1 max_fails=2 fail_timeout=30s;
}
# 用户通过不同的域名,访问同一个nginx,实现不同ip的代理。
# a.domain.com 和 c.domain.com的域名解析地址是相同的,但内部代理到不同的ip处理
# 通过nginx的$host变量和upstream的方式
server {
listen 80;
index index.jsp index.html index.htm;
#listen 443 ssl;
#ssl on;
#ssl_certificate cert/cert.pem;
#ssl_certificate_key cert/cert.key;
#ssl_session_timeout 5m;
# 其中proxy_pass http://$host;是关键代码,通过变量$host的方式匹配到
# 对应域名的upstream名,当访问不同的域名后,upstream a.domain.com和
# upstream c.domain.com将会负载均衡到对应的ip
location / {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
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://$host;
proxy_redirect http:// $scheme://;
}
#配置静态资源交给nginx处理
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
root F:/static/loginAndRegister/; #静态文件目录
expires 30d; #缓存天数
}
}
#=================================本地域名映射====================================
upstream guangyang.easy.echosite.cn {
server guangyang.easy.echosite.cn:80;
}
server {
listen 80;
server_name 16webtest.ngrok.xiaomiqiu.cn;
index index.jsp index.html index.htm;
location / {
# http://域名不能跟server_name相同
proxy_pass http://guangyang.easy.echosite.cn;
}
}
}
3. 静态资源如何被访问
当我们在浏览器中输入a.domain.com/test,会先请求动态资源,请求被转发到后端服务器上的控制层,在本实例项目中,采用的是springboot,返回的模板中,包含静态资源路径,静态资源请求的url = 浏览器中输入的a.domain.com + 模板中的静态资源路劲,因此静态资源并不会直接请求tomcat,而是被nginx拦截,直接访问指定的静态资源路径。