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 / {

      proxy_pass     http://127.0.0.1:8090;
      或者 proxy_pass   http://all_server;

    }

   }

	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; … }
Nginx常用常量:http://blog.chinaunix.net/uid-15117916-id-2777222.html
 
$scheme  http||https  协议

$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

posted @ 2019-02-19 15:35  little_ab  阅读(393)  评论(0编辑  收藏  举报