Nginx配置转发

Posted

tags:

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

参考技术A location 匹配规则
语法规则

模式 含义
location = /uri = 表示精确匹配,只有完全匹配上才能生效
location ^~ /uri ^~ 开头对URL路径进行前缀匹配,并且在正则之前。
location ~ pattern 开头表示区分大小写的正则匹配
location ~* pattern 开头表示不区分大小写的正则匹配
location /uri 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后
location / 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default

前缀匹配时,nginx 不对 url 做编码,因此请求为 /static/20%/aa,可以被规则 ^~ /static/ /aa 匹配到(注意是空格)

多个 location 配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):

注意:前缀匹配,如果有包含关系时,按最大匹配原则进行匹配。比如在前缀匹配:location /dir01 与location /dir01/dir02,如有请求 http://localhost/dir01/dir02/file 将最终匹配到 location /dir01/dir02

例子,有如下匹配规则:

location = /
echo "规则A";

location = /login
echo "规则B";

location ^~ /static/
echo "规则C";

location ^~ /static/files
echo "规则X";

location ~ .(gif|jpg|png|js|css)
echo "规则E";

location /img
echo "规则Y";

location /
echo "规则F";


那么产生的效果如下:

访问 http://localhost/category/id/1111 则最终匹配到规则 F ,因为以上规则都不匹配,这个时候应该是 Nginx 转发请求给后端应用服务器,比如 FastCGI(php),tomcat(jsp),Nginx 作为反向代理服务器存在。

所以实际使用中,笔者觉得至少有三个匹配规则定义,如下:

location = /
proxy_pass http://tomcat:8080/index


location ^~ /static/
root /webroot/static/;

location ~* .(gif|jpg|jpeg|png|css|js|ico)$
root /webroot/res/;


location /
proxy_pass http://tomcat:8080/


rewrite 语法

1、下面是可以用来判断的表达式:

2、下面是可以用作判断的全局变量

redirect 语法

server
listen 80;
server_name start.igrow.cn;
index index.html index.php;
root html;
if ( ")
rewrite ^(.*) http://star.igrow.cn$1 redirect;



防盗链

location ~* .(gif|jpg|swf) invalid_referer)
rewrite ^/ http://$host/logo.png;



根据文件类型设置过期时间

location ~* .(js|css|jpg|jpeg|gif|png|swf) request_filename)
expires 1h;
break;



禁止访问某个目录

location ~* .(txt|doc)$
root /data/www/wwwroot/linuxtone/test;
deny all;


参考文档资料链接

Nginx 配置TCP代理转发

Nginx 配置TCP代理转发

使用Nginx 新版的 stream方式,实现TCP/UDP代理转发。

在Nginx安装了 stream 模块后。

修改nginx.conf

在主配置文件下 nginx.conf 增加 stream配置。

如 nginx home 为 /opt/software/nginx

cd /opt/software/nginx/conf

vim nginx.conf

增加如下配置

stream 

    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"';

    access_log /opt/software/nginx/logs/tcp-access.log proxy ;
    open_log_file_cache off;

	# 统一放置,方便管理
	include tcpConf/*.conf;


增加stream配置

创建tcp配置文件夹,方便以后统一管理配置文件:

cd /opt/software/nginx/conf

mkdir tcpConf

创建配置文件

cd tcpConf

vim tcp9004.conf

编辑如下:

upstream tcp9004 
    server 118.178.188.188:8992;


server 
    listen 9004;
    proxy_connect_timeout 8s;
    proxy_timeout 24h;
    proxy_pass tcp9004;


测试重启Nginx

测试Nginx

cd /opt/software/nginx

./sbin/nginx -t

没有问题之后

重启Nginx

./sbin/nginx -s reload

端口监听

使用tcpdump监听tcp数据

安装tcpdump

yum install -y tcpdump

查看网卡

ifconfig

监听对应网卡上的端口

tcpdump -n -v -i eth1 port 8992

以上是关于Nginx配置转发的主要内容,如果未能解决你的问题,请参考以下文章

nginx 配置转发ws协议

Nginx 配置TCP代理转发

nginx转发配置

nginx转发配置

nginx转发socket配置

NGINX学习--nginx转发到本地文件配置