nginx基本配置
1.host域名转换 127.0.0.1 abc.test.com =>接口是为80
2.在nginx里面
http里 可以设置 upstream all_server{ server 127.0.0.1:8090 } 这个是定义负载均衡
server {
listen 80;
server_name abc.test.com;
location / {
}
}
server { listen 80; server_name eppc.test.com; location / { proxy_pass http://test_H5_uia; } location /eppc-web { proxy_pass http://all_server; } location ~ /[0-9]+/ { #获取spid if ($request_uri ~ "^/([0-9]+)/(.*)" ) { set $spid $1; set $url $2; } #更改host proxy_set_header Host $spid.$host; #因为此处重置了host,所以需要重新设置X-Forwarded-Proto #记录一个请求一个请求最初从浏览器发出时候,是使用什么协议。 #因为有可能当一个请求最初和反向代理通信时,是使用https,但反向代理和服务器通信时改变成http协议,这个时候,X-Forwarded-Proto的值应该是https proxy_set_header X-Forwarded-Proto $scheme; if ($url ~ "[^eppc-web]") { proxy_pass http://eppc_merchant_H5_uia/$url; } if ($url ~ "(.*)eppc-web(.*)") { proxy_pass http://all_server/$url; } } }
Nginx中,set $para $1,$1表示路径中正则表达式匹配的第一个参数。
如:location ~/yxl/(.*)/(.*) { set $para1 $1 set $para2 $2 content_by_lua_block { ngx.say(ngx.var.para1) ngx.say(ngx.var.para2) } } 此时,若访问路径为localhost:8080/yxl/qwe/asd时,则浏览器会输出 qwe asd
$host https://www.jianshu.com/p/0850db5af284
一个server可以多次使用server_name指令,来实现俗称的“虚拟主机”
在这个配置中,nginx仅仅检查请求的“Host”头以决定该请求应由哪个虚拟主机来处理。如果Host头没有匹配任意一个虚拟主机,或者请求中根本没有包含Host头,那nginx会将请求分发到定义在此端口上的默认虚拟主机。在以上配置中,第一个被列出的虚拟主机即nginx的默认虚拟主机——这是nginx的默认行为。而且,可以显式地设置某个主机为默认虚拟主机,即在”listen”指令中设置”default_server”参数: server { listen 80 default_server; server_name example.net www.example.net; … }
$request_uri https://blog.csdn.net/cn_yaojin/article/details/80334604
if ($request_uri ~* "^/$") 表示url中只有域名,后面不跟任何东西,比如www.baidu.com。 if ($request_uri ~* "test") 表示域名后面那串儿只要包含test这个关键词,就可匹配成功。
比如www.baidu.com/pan/beta/test3
Nginx做反向代理和负载均衡时“X-Forwarded-For”信息头的处理
http://blog.51cto.com/wjw7702/1150225
https://www.cnblogs.com/lwhkdash/archive/2012/10/14/2723252.html
3.负载均衡
1)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如
那么10次一般只会有1次会访问到8081,而有9次会访问到8080
3)ip_hash
上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
4)fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5)url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
以上5种负载均衡各自适用不同情况下使用,所以可以根据实际情况选择使用哪种策略模式,不过fair和url_hash需要安装第三方模块才能使用,
4.启动静态资源服务器
# penguin 启动静态资源服务器 server { listen 8099;#端口号 server_name localhost;#本机 charset utf-8; #access_log logs/host.access.log main; location ~ .*\.(gif|jpg|jpeg|png)$ { expires 24h; root home/images/;#指定图片存放路径 相对于nginx的跟目录 # access_log /usr/local/websrv/nginx-1.9.4/logs/images.log;#日志存放路径 proxy_store on; proxy_store_access user:rw group:rw all:rw; proxy_temp_path home/images/;#图片访问路径 proxy_redirect off; proxy_set_header Host 127.0.0.1; client_max_body_size 10m; client_body_buffer_size 1280k; proxy_connect_timeout 900; proxy_send_timeout 900; proxy_read_timeout 900; proxy_buffer_size 40k; proxy_buffers 40 320k; proxy_busy_buffers_size 640k; proxy_temp_file_write_size 640k; if ( !-e $request_filename) { proxy_pass http://127.0.0.1;#默认80端口 } } }
5.优化目录结构 nginx.conf 最后写了一句话include vhost/*.conf;
https://www.cnblogs.com/liang-wei/p/5849771.html
6.valid_referers防盗链
http://blog.sina.com.cn/s/blog_94c21e8f0101qfjr.html