Nginx的应用场景

Nginx是一款Http Server,支持http、imap、pop3、smtp协议的服务代理。Nginx文档:http://nginx.org/en/docs/

1 虚拟主机

在Nginx服务器中创建不同的目录,然后在Nginx的启动配置文件中将监听的端口请求映射到对应的目录中,从而实现虚拟主机的效果。

http {
	server {
		listen 80;
		server_name www.demo01.com;
		root /usr/local/soft/nginx/domains/demo01;
		location / {
			index index.html index.htm;
		}
		error_page 500 502 503 504 /50x.html;
		location = /50x.html{
			root html;
		}
	}
	server {
		listen 80;
		server_name www.demo02.com;
		root /usr/local/soft/nginx/domains/demo02;
		location / {
			index index.html index.htm;
		}
		error_page 500 502 503 504 /50x.html;
		location = /50x.html{
			root html;
		}
	}
}

location的匹配规则说明:http://nginx.org/en/docs/http/ngx_http_core_module.html#location

2 反向代理

隐藏目标服务器,反向:服务于服务器

http {
	server {
		listen 80;
		server_name localhost;
		location / {
			proxy_pass 192.168.125.1:9090;
			proxy_method POST;
			# 添加请求头信息
			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 {
	upstream servergroup {
		server 192.168.125.1:9090;
		server 192.168.125.2:9090;
		server 192.168.125.3:9090;
	}
	...
			proxy_pass http://servergroup;
	...
}

3 负载均衡

负载策略有:wrr(带权重的轮询,默认的)、ip_hash(根据hash值固定目标IP)、least_conn(优先连接数最小、权重越大的)。
另外还有第三方负载均衡策略的module可以安装使用,比如fair(优先选择响应时间快的目标服务器)

http {
	upstream servergroup {
		least_conn;
		server 192.168.125.1:9090 weight=2 maxfails=3 fail_timeout=10;
		server 192.168.125.2:9090 weight=1;
		server 192.168.125.3:9090 backup;
		server 192.168.125.4:9090 down;
	}
	server {
		listen 80;
		server_name localhost;
		location / {
			proxy_pass http://servergroup;
		}
	}
}

4 HTTP缓存

缓存清理策略:主动过期时间清理、达到最大内存空间清理最少使用的缓存、利用purge主动清理(第三方module,需要手动添加。能够根据url主动清理缓存)

http {
	proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=demo_cache:50m inactive=10m max_size=1g;
	
	server {
		listen 80;
		server_name localhost;
		location / {
			proxy_pass 192.168.125.1:9090;
			proxy_cache demo_cache;
			proxy_cache_key $host$uri$is_args$args;
			proxy_cache_valid 200 304 2m;
			# 添加响应头信息
			add_header X-Proxy_Cache $upstream_cache_status;
		}
	}
}

缓存指令说明:http://nginx.org/en/docs/http/ngx_http_core_module.html#location

purge通过url主动清理缓存的配置方法:

http {
	server {
		...
		location ~ /purge(/.*) {
			allow all;
			proxy_cache_purge demo_cache $host$uri$is_args$args;
		}
		...
	}
}

5 动静分离

将静态资源与应用分开放置,在nginx中可以定义静态资源的路径:

将静态文件放到nginx服务器的目录下面
将静态文件放到location的网络路径下面
将静态文件放到upsteam的负载均衡的服务器定义上面。

nginx中可以配置哪些类型的请求路由到静态资源:

根据静态资源的类型进行路由
根据客户端的类型进行路由

http {
	server {
		listen 80;
		server_name localhost;
		location / {
			proxy_pass 192.168.125.1:9090;
		}
		location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
			root /usr/local/soft/nginx/data/static;
		}
	}
}

6 数据压缩

gzip压缩,默认对html进行压缩
其他类型的文件可以自己配置压缩的比值,压缩的类型。

http {
	gzip on;
	gzip_http_version 1.1; # 定义http最小压缩版本,低于这个版本就不压缩,默认是HTTP/1.1
	gzip_comp_lever 3; # 1-9 ,默认是1 ,值越大压缩比越高
	gzip_disable "MSIE [1-6\."; # 定义哪些浏览器不打开压缩
	gzip_min_length 1k; # 定义小于1k的文件不进行压缩
	gzip_buffers 32 4k # 默认是使用32个缓存空间,每个缓存空间大小是4k
	gzip_proxied any; # 如果有多个nginx服务器跳转的时候,为了保证压缩正常,需要打开这个any,默认是off关闭状态
	gzip_vary on; # 打开在响应头中添加已进行压缩的标识,off关闭
	gzip_types text/plain application/json application/javascript application/x-javascript text/css application/xml text/javascript application/x-http-php image/jpeg image/gif image/png;
	
	server {
	...
}

7 跨域请求

本质是浏览器的跨域保护机制。在响应头中添加:Access-Control-Allow-Origin: *,来告诉浏览器这个资源允许跨域请求。

7.1 前端方案:jsonp

jsonp底层是利用 javascript、img 标签中的src属性、link 标签中的ref属性来实现跨域访问资源的,因为html的这几个标签引用资源链接不会有浏览器的跨域限制。

$ajax({
	url: ,
	type: ,
	dataType: 'JSONP',
	jsonp: 'callback',
	jsonpCallback: 'successCallback',
	success: function(data) {}
	error: function() {}
});

后端的响应代码修改:

return "successCallback("+resultData+")";

7.2 后端方案

① @CrossOrigin

@CrossOrigin

② 注入Spring框架的WebMvcConfigurerAdapter类,重写其中的addCorsMappings方法。

@Configuration
public class CORSConfiguration {
	@Bean
	public WebMvcConfigurer corsConfigurer() {
		return new WebMvcConfigurerAdapter() {
			@Override
			public void addCorsMappings(CorsRegistry registry) {
				registry.addMapping("/**")
				.allowedOrigins("http://192.168.125.1:9090")
				.allowedMethods("GET","POST","DELETE","PUT","OPTIONS")
				.allowedCredentials(false).maxAge(3600);
			}
		}
	}
}

7.3 nginx两种处理方案

① 将两个域都代理,变成同一个域。前端只访问nginx服务器,由nginx进行资源路由。

http {
	server {
		listen 80;
		server_name localhost;
		location /demo01/ {
			proxy_pass http://192.168.125.1:9090;
		}
		location /demo02/ {
			proxy_pass http://192.168.125.2:9090
		}
	}
}

② 在nginx的启动配置文件中的location中将Access-Control-Allow-Origin: *添加到头中。

http {
	server {
		location / {
		    # nginx代理的请求端口号
			proxy_pass http://192.168.125.1:9091; 
			# 这个端口的请求都添加以下返回头信息
			add_header 'Access-Control-Allow-Origin' '*';
			add_header 'Access-Control-Allow-Methods' 'GET,PUT,POST,DELETE,OPTIONS';
			add_header 'Access-Control-Allow-Header' 'Content-TYpe,*';
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值