nginx stream

Posted code_____monkey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx stream相关的知识,希望对你有一定的参考价值。

#stream模块,就跟http模块一样 
stream 
	#日志记录模块
	log_format basic '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time';

	access_log /var/log/nginx/access.log basic buffer=32k;

	upstream ssh 
                server 127.0.0.1:22;
        
	#里面可以有多个监听服务,配置监听端口和代理的ip和端口就可以进行tcp代理了。
    server   
        listen 9922;
        proxy_pass ssh;
        proxy_connect_timeout 1h;
        proxy_timeout 1h;
    
	server 
		listen 13306;
		#allow 127.0.0.1;
		#deny all;
		proxy_pass 127.0.0.1:3306;
		proxy_connect_timeout 1h;
		proxy_timeout 1h;
	

其他日志格式

log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" 
                  "$upstream_connect_time"';


log_format proxy '[$time_local] remote_addr:$remote_addr $protocol status:$status $bytes_sent $bytes_received s_time:$session_time upstream_addr:$upstream_addr u_conn_time:$upstream_connect_time';

配置经验

  • 测试发现nginx会等待session结束才会记录到日志文件;
  • session日志只是tcp层面的记录,包括session时间,发送接收字节数等等;
  • session内部发送日志(比如一个socket连接建立起来以后,多次发送心跳数据)需要在应用层面才能记录;

重启nginx 可以将缓存日志刷新到文件中。

  • 日志参数
参数说明示例
$remote_addr客户端地址211.28.65.253
$remote_user客户端用户名称--
$time_local访问时间和时区18/Jul/2012:17:00:01 +0800
$request请求的URI和HTTP协议"GET /article-10000.html HTTP/1.1"
$http_host请求地址,即浏览器中你输入的地址(IP或域名)www.0.com192.168.100.100
$statusHTTP请求状态200
$upstream_statusupstream状态200
$body_bytes_sent发送给客户端文件内容大小1547
$http_refererurl跳转来源百度一下,你就知道
$http_user_agent用户终端浏览器等信息"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C;
$ssl_protocolSSL协议版本TLSv1
$ssl_cipher交换数据中的算法RC4-SHA
$upstream_addr

后台upstream的地址,即真正提供服务的主机地址;

当ngnix做负载均衡时,可以查看后台提供真实服务的设备

10.10.10.100:80
$request_time整个请求的总时间0.205
$upstream_response_time请求过程中,upstream响应时间0.002

参考 nginx 代理ssh - ahuo - 博客园 

---------------stream 反向代理 mysql------------------

1、-hlocalhost 不会被 deny

2、-h127.0.0.1 会被 deny

3、-h本机ip 会被 deny

4、来源ip 被 deny 连接报错:

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

4、直连和代理 不同账户的连接区别

CREATE USER 'test'@'127.0.0.1' IDENTIFIED BY '123456';
grant all privileges on test.* to 'test'@'127.0.0.1';

mysql -ujyxt -P3306 -h127.0.0.1 -p'123456'  能连接
mysql -ujyxt -P3306 -hlocalhost -p'123456'  不能连接
mysql -ujyxt -P3306 -h192.168.1.1 -p'123456' 不能连接

mysql -ujyxt -P13306 -h127.0.0.1 -p'123456'  能连接
mysql -ujyxt -P13306 -hlocalhost -p'123456'  不能连接
mysql -ujyxt -P13306 -h192.168.1.1'123456' -p 能连接


CREATE USER 'test'@'localhost' IDENTIFIED BY '123456';
grant all privileges on test.* to 'test'@'localhost';

mysql -ujyxt -P3306 -h127.0.0.1 -p'123456'  能连接
mysql -ujyxt -P3306 -hlocalhost -p'123456'  能连接
mysql -ujyxt -P3306 -h192.168.1.1 -p'123456' 不能连接

mysql -ujyxt -P13306 -h127.0.0.1 -p'123456'  能连接
mysql -ujyxt -P13306 -hlocalhost -p'123456'  能连接
mysql -ujyxt -P13306 -h192.168.1.1 -p'123456' 能连接

CREATE USER 'test'@'%' IDENTIFIED BY '123456';
grant all privileges on test.* to 'test'@'%';

mysql -ujyxt -P3306 -h127.0.0.1 -p'123456'  能连接
mysql -ujyxt -P3306 -hlocalhost -p'123456'  能连接
mysql -ujyxt -P3306 -h192.168.1.1 -p'123456' 能连接

mysql -ujyxt -P13306 -h127.0.0.1 -p'123456'  能连接
mysql -ujyxt -P13306 -hlocalhost -p'123456'  能连接
mysql -ujyxt -P13306 -h192.168.1.1 -p'123456' 能连接

以上是关于nginx stream的主要内容,如果未能解决你的问题,请参考以下文章

nginx 一直都在做7层转发,4层也需要看看

nginx集群配置

nginx stream

nginx stream

利用nginx的stream模块实现内网端口的转发代理

linux nginx配置stream后启动报异常 /usr/lib64/nginx/modules/ngx_stream_module.so: undefined symbol: SSL_CTX_s