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;
}
}