简单记录一下个人使用心得:前端出现了端口跨域的问题,jsonp、修改cors请求头都尝试了无效,最后用nginx反向代理神奇般的解决了。。。
一、了解nginx
Nginx 是一个高性能的HTTP和反向代理web服务器
用大白话来描述一下:从上图可以看到http请求到我们的应用服务器中间部署了nginx
,请求不能直接通过真实的地址来访问我们的应用服务器,而是通过nginx配置的地址来访问,这个也是我们常说的反向代理。
例如:没有配置nginx,我可以用地址A来访问。配置之后用地址B来映射地址A。前台请求可以用B来访问,通过我们的nginx真实访问的是A,并且把响应数据带回。
二、nginx基础使用
- 安装的教程有很多,这里就不写了。
- 安装好之后可以看到基本目录结构:
client_body_temp
conf
fastcgi_temp html
logs
proxy_temp
sbin
scgi_temp
uwsgi_temp
主要用到:
(1)conf
用来存放配置文件相关
(2)html
用来存放静态文件的默认目录 html、css等
(3)sbin
nginx的主程序
3.配置文件
(1)http块:全局配置
worker_processes
worker_processes 1; 默认为1,表示开启一个业务进程
worker_connections
worker_connections 1024; 单个业务进程可接受连接数
include mime.types;
include mime.types; 引入http mime类型
default_type application/octet-stream;
default_type application/octet-stream; 如果mime类型没匹配上,默认使用二进制流的方式传输。
sendfile on;
sendfile on; 使用linux的 sendfile(socket, file, len) 高效网络传输,也就是数据0拷贝。
未开启sendfile
keepalive_timeout 65;
keepalive_timeout 65;
(2)server块 虚拟机配置
server {
listen 80; 监听端口号
server_name localhost; 主机名
location / { 匹配路径
proxy_pass http://xxx.com/;
}
}
注意:
listen、server_name 是nginx的监听端口和地址
location中的proxy_pass 是被代理的地址
通过nginx的地址来映射proxy_pass 的地址
三、解决实际问题
1.放静态资源
静态资源可以放到任意一个目录下例如static
static:目录url
server {
listen 8000;
listen somename:8080;
server_name somename alias another.alias;
location / {
root static;
index index.html index.htm;
}
}
2.负载均衡
(1)轮询
默认情况下使用轮询方式,逐一转发,这种方式适用于无状态请求。
(2)weight(权重)
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream httpd {
server 127.0.0.1:8050 weight=10 down;
server 127.0.0.1:8060 weight=1;
server 127.0.0.1:8060 weight=1 backup;
}
down:表示当前的server暂时不参与负载
weight:默认为1.weight越大,负载的权重就越大。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。
(3)ip_hash
根据客户端的ip地址转发同一台服务器,可以保持回话。
l(4)east_conn
最少连接访问
(5)url_hash
根据用户访问的url定向转发请求
(6)fair
根据后端服务器响应时间转发请求