编程技术分享平台

网站首页 > 技术教程 正文

nginx+lua 配置正向代理(支持非80端口的)

xnh888 2024-09-08 10:56:43 技术教程 31 ℃ 0 评论

先介绍一下常见的nginx配置正向代理的方式:

nginx配置正向代理:

server {

resolver 114.114.114.114;

resolver_timeout 5s;

listen 10000;

allow 192.168.247.129;

deny all;

access_log /home/nginx/nginx/logs/proxy.access.log;

error_log /home/nginx/nginx/logs/proxy.error.log;

location / {

proxy_pass $scheme://$host$request_uri;

proxy_set_header Host $http_host;

proxy_connect_timeout 30;

}

resolver:域名解析服务器(114.114.114.114或者8.8.8.8)

listen: 外网访问代理服务器的端口

allow 192.168.247.129; 放行的白名单

deny all 黑名单,除了上面的白名单,其他的全部拦截

access_log 接入日志路径

error_log 错误日志路径

proxy_pass 把内网访问的请求,转到外网

这种常规的配置带来的一个问题就是:非80端口,转发不出去。$scheme://$host$request_uri 这个表达式是没有端口的,也就是默认是80端口。很纠结的事情出来了,非80端口的怎么办呢?

下面我们来介绍一种非80端口的方式

介绍:ngx_lua – 把lua语言嵌入nginx中,使其支持lua来快速开发基于nginx下的业务逻辑

以下的包是支持nginx-1.14.2.tar.gz,nginx的版本不一样,需要的lua包可能不一样(安装出现报错,可能就是版本的问题,我换了好几个)

使用nginx用户下载:(一般是拿nginx用户来装nginx,如果用root那就直接操作)

wget https://luajit.org/download/LuaJIT-2.0.4.tar.gz

wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz

wget https://github.com/openresty/lua-nginx-module/archive/v0.10.13.tar.gz

tar -zxvf LuaJIT-2.0.4.tar.gz

tar -zxvf v0.2.19.tar.gz

tar -zxvf v0.10.13.tar.gz

切换root帐号:su - root

cd LuaJIT-2.0.4

make install PREFIX=/usr/local/luajit

echo "/usr/local/luajit/lib" > /etc/ld.so.conf.d/usr_local_luajit_lib.conf

ldconfig

(上面这步操作,用nginx操作的话,nginx后面编译或者nginx启动的时候会有问题,我尝试了很久,感觉必须用root来操作)

切换到安装nginx的用户:su - nginx

#注意环境变量!

export LUAJIT_LIB=/usr/local/luajit/lib

export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0

编译nginx:

cd nginx-1.14.2

./configure --prefix=/home/nginx/nginx --with-pcre --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-stream --add-module=/home/nginx/nginx-upsync-module-master --add-module=/home/nginx/nginx_upstream_check_module-master --add-module=/home/nginx/nginx-module-vts-master --add-module=/home/nginx/ngx_devel_kit-0.2.19/ --add-module=/home/nginx/lua-nginx-module-0.10.13

我编译了http,tcp的然后加了几个第三方组件,不需要的可以删掉

./configure --prefix=/home/nginx/nginx --with-pcre --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-stream --add-module=/home/nginx/ngx_devel_kit-0.2.19/ --add-module=/home/nginx/lua-nginx-module-0.10.13

编译完成,生成目录:/home/nginx/nginx

在nginx.conf下面配置正向代理:

server {

resolver 114.114.114.114;

resolver_timeout 5s;

listen 10000;

allow 192.168.247.129;

deny all;

access_log /home/nginx/nginx/logs/proxy.access.log;

error_log /home/nginx/nginx/logs/proxy.error.log;

location / {

if ($http_host ~ "(:(\d){4})$"){

set_by_lua $port "

local host = ngx.req.get_headers()[\"host\"];

local port = string.sub(host,-4);

return port ";

set $passport $port ;

proxy_pass $scheme://$host:$passport$request_uri;

}

if ($http_host ~ "(:(\d){3})$"){

set_by_lua $port "

local host = ngx.req.get_headers()[\"host\"];

local port = string.sub(host,-3);

return port ";

set $passport $port ;

proxy_pass $scheme://$host:$passport$request_uri;

}

if ($http_host ~ "(:(\d){2})$"){

set_by_lua $port "

local host = ngx.req.get_headers()[\"host\"];

local port = string.sub(host,-2);

return port ";

set $passport $port ;

proxy_pass $scheme://$host:$passport$request_uri;

}

if ($http_host !~ :){

proxy_pass $scheme://$host$request_uri;

}

proxy_set_header Host $http_host;

}

}

allow 192.168.247.129;

deny all;

这个顺序不要跌倒,我试过的,必须这样

location里面的代码不是我写的,我从网上拷的,毕竟不是专门写nginx开发的

测试一下:

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表