Nginx常用场景

102 阅读2分钟

1.web服务器

# HTTP
server {
  listen 80;
  server_name localhost;
  
  location / {
    root html;
    index index.html index.htm;
  }
}

# HTTPS server
# 提高网络传输安全性,指定数字证书和私钥
server {
  listen       443 ssl;
  server_name  localhost;

  ssl_certificate      cert.pem;
  ssl_certificate_key  cert.key;

  ssl_session_cache    shared:SSL:1m;
  ssl_session_timeout  5m;

  ssl_ciphers  HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers  on;

  location / {
    root   html;
    index  index.html index.htm;
  }
}

2.反向代理

前端服务器将请求转发到后端服务器,客户端不直接与后端服务器通信,可以解决跨域问题,隐藏后端服务器信息、统一对外访问提高后端服务器的安全性。

server {
  listen 80;
  server_name localhost;
  
  location / {
    root html;
    index  index.html index.htm;
    
    #反向代理:
    proxy_pass http://192.168.0.106:8888; #后端地址
    proxy_set_header Host $host; #用户访问的域名
    proxy_set_header X-Real-IP $remote_addr;  #用户的IP
  }
}

3.负载均衡

负载均衡时一种将流量分发到后端多台服务器的技术,来提高应用程序的高可用和并发能力。

配置步骤:

1.在http节点下,添加upstream节点。

2.将proxy_pass 配置为:http://upstream名称

upstream webservers {
  server 192.168.0.106:8888;
  server 192.168.0.107:8888;
  server 192.168.0.108:8888;
}

server {
  listen 80;
  server_name localhost;
  
  location / {
    root html;
    index  index.html index.htm;
    
    proxy_pass http://webservers;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }
}

upstream默认按照 轮询 的方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。虽然这种方式简便、成本低廉。但缺点是:可靠性低和负载分配不均衡。适用于图片服务器集群和纯静态页面服务器集群。

分配策略:

weight(权重): 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

upstream webservers{ 
	server 192.168.0.106:8888 weight=1;
  server 192.168.0.107:8888 weight=5;
  server 192.168.0.108:8888 weight=10;
}

ip_hash(访问ip): 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream webservers{ 
	ip_hash; 
	server 192.168.0.106:8888 weight=1;
  server 192.168.0.107:8888 weight=5;
  server 192.168.0.108:8888 weight=10;
}

fair(第三方) :按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。

upstream favresin{      
 	server 192.168.0.106:8888;
  server 192.168.0.107:8888;
  server 192.168.0.108:8888;
  fair; 
}

4.防盗链

防止其他网站盗用网站资源的一种安全机制。例如防止盗用图片、视频等。

server {
	listen 80;
	server_name localhost;
	location ~* .(gif|jpg|png)$ {
		valid_referers none blocked *.host.com;
		if($invalid_referer) {
			return 403;
		}
	}
}

5.URL重定向

网站域名发生了变化,希望将访问老域名的请求转发的新的域名。

server {
	listen 80;
	server_name oldhost.com
	location {
		rewrite ^/(.*)$ https://newhost.com/$1;
	}
}

server {
	listen 80;
	server_name oldhost.com
	location {
		rewrite ^/old-path/(.*)$ new-path/$1;
	}
}

6.重定向到移动端

server {
	listen 80;
	server_name localhost;
	location / {
		root html;
    index  index.html index.htm;
		
		if($http_user_agent ~*'(android|phone|ipad)') {
			rewrite ^/(.*)$ https://m.host.com/$1;
		}
	}
}

7.基于请求路径转发不同服务

网站包含多个模块,每个模块对应不同的后端服务器,可根据请求路径进行转发。

server {
	listen 80;
	server_name localhost;
	
  server 192.168.0.107:8888;
  server 192.168.0.108:8888;

	location / {
		proxy_pass http://192.168.0.106:8888;
	}
	location /wuhan {
		proxy_pass http://192.168.0.107:8888;
	}
	location /shenzhen {
		proxy_pass http://192.168.0.108:8888;
	}
}