前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tengine、nginx配置正向代理,其他内网机器通过代理访问外网,支持https

tengine、nginx配置正向代理,其他内网机器通过代理访问外网,支持https

作者头像
joshua317
发布2022-03-29 15:04:53
2.6K0
发布2022-03-29 15:04:53
举报
文章被收录于专栏:技术博文技术博文

1.进入软件包目录

代码语言:javascript
复制
cd /usr/local/src

2.下载tengine

代码语言:javascript
复制
wget https://tengine.taobao.org/download/tengine-2.3.3.tar.gz

3.解压

代码语言:javascript
复制
tar zxvf tengine-2.3.3.tar.gz

4.更新升级apt-get

代码语言:javascript
复制
apt-get update
apt-get upgrade

5.安装依赖库

5.1 PCRE 库

PCRE(Perl Compatible Regular Expressions)是一个 Perl 库,包括 perl 兼容的正则表达式库。nginx rewrite 依赖于 PCRE 库,所以在安装 Tengine 前一定要先安装 PCRE。

代码语言:javascript
复制
apt-get install libpcre3 libpcre3-dev
5.2 Zlib 库

Zlib 是提供资料压缩用的函数库,当 Tengine 想启用 gzip 压缩的时候就需要使用到 Zlib。

代码语言:javascript
复制
apt-get install zlib1g-dev
5.3 OpenSSL 库

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。安装 OpenSSL 主要是为了让 Tengine 支持 HTTPS 的访问请求。

代码语言:javascript
复制
apt-get install openssl libssl-dev

6.安装build-essential

解决:./configure: error: C compiler cc is not found

代码语言:javascript
复制
apt-get install build-essential

7.生成makefile

此处增加了proxy_connect模块,用来支持代理服务支持https的请求,从而可以实现内网机器通过代理访问外网。

代码语言:javascript
复制
./configure --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --add-module=./modules/ngx_http_proxy_connect_module

8.编译安装

代码语言:javascript
复制
make && make install

9.开机自启动

代码语言:javascript
复制
vi /lib/systemd/system/nginx.service
代码语言:javascript
复制
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
[Install]
WantedBy=multi-user.target

10.使配置生效

代码语言:javascript
复制
systemctl daemon-reload

注意可能会产生下面的错误

错误:System has not been booted with systemd as init system (PID 1). Can‘t operate. 原因:如果是一般的Linux操作系统,可能是因为Linux中没有使用systemd,想用systemd命令来管理Linux上的服务,因此会报错,很可能是使用的是经典的SysV init(sysvinit)系统。 但我这个是window10下WSL的Ubuntu,就会使SysV init而不是systemd。 解决:apt install systemctl

11.设置开机启动

代码语言:javascript
复制
systemctl enable nginx.service

12、运行tengine

1)启动

代码语言:javascript
复制
/usr/local/nginx/sbin/nginx
或者
systemctl start nginx.service

2)重启

代码语言:javascript
复制
/usr/local/nginx/sbin/nginx -s reload
或者
systemctl reload nginx.service

3)停止

代码语言:javascript
复制
/usr/local/nginx/sbin/nginx -s stop
或者
systemctl stop nginx.service

13.是否启动成功,默认80端口,访问地址:http://ip:port/

14.配置nginx

参考文档:https://tengine.taobao.org/document_cn/proxy_connect_cn.html

代码语言:javascript
复制
server {
	    listen 3182;

	    # dns resolver used by forward proxying
	    resolver  114.114.114.114;

	    # forward proxy for CONNECT request
	    proxy_connect;
	    proxy_connect_allow            443 563;
	    proxy_connect_connect_timeout  10s;
	    proxy_connect_read_timeout     10s;
	    proxy_connect_send_timeout     10s;

	    # forward proxy for non-CONNECT request
	    location / {
		  proxy_pass $scheme://$http_host$request_uri;
		  proxy_set_header Host $host;
	    }
    }

15 重启nginx

代码语言:javascript
复制
#校验nginx.conf配置文件
/usr/local/nginx/sbin/nginx -t
#校验通过,重启nginx
/usr/local/nginx/sbin/nginx -s reload

16.测试

通过代理访问git

代码语言:javascript
复制
curl https://www.baidu.com/ -v -x 127.0.0.1:3182
curl -i  --proxy 127.0.0.1:3182 www.baidu.com

17.内网机器通过代理访问到外网服务

17.1 windows系统下

打开IE浏览器,在IE设置中添加代理访问,工具-》Internet设置-》连接--》局域网(LAN)设置

设置完,打开浏览器进行测试即可。可以通过nginx的访问日志进行查看。

17.2 linux系统下

在内网的机器上进行操作:

代码语言:javascript
复制
vi /etc/profile
#export http_proxy=正向代理服务器http的IP:端口
export http_proxy=192.168.3.114:3182

#export https_proxy=正向代理服务器https的IP:端口
export https_proxy=192.168.3.114:3182


#保存文件后重新加载环境
source /etc/profile

其中192.168.3.114是安装nginx代理服务器的ip。3182是代理服务的端口号。

测试:

代码语言:javascript
复制
curl -i www.baidu.com
#如果未加环境变量代理设置,则可以通过临时代理访问
curl -i --proxy 192.168.3.114:3182  www.baidu.com

18.扩展

18.1 Nginx Http Proxy 代理服务器,本身是不支持代理 Https 网站。

因为 Nginx 不支持 CONNECT,所以无法正向代理 Https 网站。 如果访问 Https 网站,比如:https://www.baidu.com,Nginx access.log 日志如下:

代码语言:javascript
复制
"CONNECT www.baidu.com:443 HTTP/1.1" 400

所以想要代理Https 网站,需要让nginx支持 CONNECT模式,即增加ngx_http_proxy_connect_module模块。

18.2 ngx_http_proxy_connect_module的文档

ngx_http_proxy_connect_module模块主要用于隧道SSL请求的代理服务器。

文档地址:https://github.com/chobits/ngx_http_proxy_connect_module#proxy_connect

本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/250

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-03-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.进入软件包目录
    • 2.下载tengine
      • 3.解压
        • 4.更新升级apt-get
          • 5.安装依赖库
            • 5.1 PCRE 库
            • 5.2 Zlib 库
            • 5.3 OpenSSL 库
          • 6.安装build-essential
            • 7.生成makefile
              • 8.编译安装
                • 9.开机自启动
                  • 10.使配置生效
                    • 11.设置开机启动
                      • 12、运行tengine
                        • 13.是否启动成功,默认80端口,访问地址:http://ip:port/
                          • 14.配置nginx
                            • 15 重启nginx
                              • 16.测试
                                • 17.内网机器通过代理访问到外网服务
                                  • 17.1 windows系统下
                                  • 17.2 linux系统下
                                • 18.扩展
                                  • 18.1 Nginx Http Proxy 代理服务器,本身是不支持代理 Https 网站。
                                  • 18.2 ngx_http_proxy_connect_module的文档
                              相关产品与服务
                              文档服务
                              文档服务(Document Service,DS)是腾讯云数据万象提供云上文档处理服务,支持多种类型的文件生成图片或 html 格式的预览,可以解决文档内容的页面展示问题,满足 PC、App 等多端的文档在线浏览需求。同时,本产品还提供文本隐私筛查能力,可以有效识别文本中的身份证号、银行卡号、手机号等敏感数据,满足数据可用性和隐私保护的各种要求。
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档