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

浙公网安备 33010602011771号