nginx stream 转发

前言

为了文章通过,作如下注释: stream: 流; firewall: 防火墙;

本篇文章 主要是配合 上一篇 opn 穿透内网来使用的

通过 公网服务器 + opn 实现了 内网穿透, 然后我们通过 nginx stream转发 就可以实现 tcp stream转发,这样就可以 做到:

  1. 外网ip + port 访问到内网的服务(本教程实现
  2. 进一步的实现就是 多个域名 访问 内网不同项目

一、 centos 安装 nginx

yum install -y nginx 即可完成安装

二、nginx 配置

The ngx_stream_proxy_module module (1.9.0) allows proxying data streams over TCP, UDP (1.9.13), and UNIX-domain sockets.
官网说 ngx 可以代理 TCP,UDP…数据stream

vim /etc/nginx/nginx.conf 编辑nginx 配置文件

配置很简单, 和 ngx负载均衡配置相似, 只需要加上 steam 相关配置即可

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}

stream {
	
	server {
	
		listen 10000;
		proxy_pass 192.168.131.6:8080;
	}
}

需要注意的配置错误

通过 nginx -t 显示一直报错, 后来发现, 这个多了个 http scheme。 这里是stream转发, 各种 scheme 的数据stream都会有。只需要 ip:port 即可。(upstream 负载均衡的时候也需要注意哦)

在这里插入图片描述

三、 nginx 启动

nginx -t 测试 nginx 配置文件是否存在语法错误,没有错误则 返回 ok

nginx -s reload nginx 测试没有错误后, 用来启动或者重启 nginx

四、 访问本地 8080 端口的页面

可以正常访问

在这里插入图片描述

五、 遇到的问题

很有可能在访问 本地 8080 服务的时候,页面不能正常加载 出来, cant get any response 之类的信息

4.1 页面不能正常加载

telnet 本地opnip port

出现如下图情况,则有两种可能

  1. 本地firewall没有关闭
  2. 或者 本地 8080 端口没有 tcp 相关服务开启
    在这里插入图片描述
    我遇到的问题就是我的 win10 firewall 开启了,我直接 关闭了firewall,如果是经常用作的服务器,我建议关闭 firewall,开启访问端口

4.2 辅助测试

ping opnip

如果 ping 不通,则是firewall开启了
在这里插入图片描述
关闭了firewall,同时关闭了 8080 端口的服务,测试结果如下。

临时总结下不一定对: telnet 如果出现 Connection refused/failed 应该就是 端口可以正常访问只是服务没有开启而已。

在这里插入图片描述

正常访问时候, telnet 结果:
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: nginx stream 可以通过配置实现对 HTTPS 协议的转发。具体步骤如下: 1. 配置 SSL 证书和私钥,可以使用自签名证书或者购买的证书。 2. 配置 upstream,指定要转发的目标服务器和端口号。 3. 配置 server,指定监听的端口号和 SSL 证书和私钥的路径。 4. 配置 proxy_pass,将请求转发到 upstream 中指定的目标服务器。 5. 配置 proxy_ssl_verify,设置是否验证目标服务器的 SSL 证书。 6. 配置 proxy_ssl_trusted_certificate,设置信任的 SSL 证书列表。 7. 配置 proxy_ssl_protocols,设置支持的 SSL 协议版本。 8. 配置 proxy_ssl_ciphers,设置支持的 SSL 加密算法。 以上是基本的配置步骤,具体的配置内容可以根据实际情况进行调整。 ### 回答2: Nginx是一款高性能的HTTP和反向代理服务器,同时也支持stream模块,可以用来转发TCP和UDP流量。而在使用nginx stream模块进行https协议转发时,需要注意以下几个问题: 1. 证书配置 在使用https协议时,需要配置SSL证书才能保障数据传输的安全。使用nginx stream模块时,需要在nginx.conf文件中配置ssl_certificate和ssl_certificate_key参数,指定证书和私钥的位置。 2. 代理配置 在nginx stream模块中,需要使用proxy_pass指令将请求转发给目标服务器,并且需要指定目标服务器的端口号和协议类型。同时,还需要配置proxy_ssl参数,打开SSL代理功能,并且指定代理服务器的SSL证书。 3. 目标服务器配置 在将请求转发给目标服务器时,需要确保目标服务器能够正确地解析https协议。对于使用HTTPS协议的Web服务,可以在Nginx配置文件中指定目标主机,或者通过HTTP代理服务器连接目标主机。 4. 调试和错误处理 在使用nginx stream模块进行https协议转发时,可能会遇到各种问题,例如证书验证失败、SSL协商失败等等。因此,需要对Nginx的配置和错误日志进行详细调试和错误处理,以保障转发的正常运行。 ### 回答3: Nginx是一款开源的高性能Web服务器及反向代理服务器,它不仅可以将HTTP请求转发到各个服务器上,还能够将TCP或UDP请求进行转发Nginxstream模块可以用来转发TCP/UDP协议,包括HTTPS。 在转发HTTPS协议时,需要使用以下几个步骤: 1. 获取证书和密钥 Nginx需要一个有效的TLS证书和私钥来进行HTTPS连接,一个简单的方法是使用Let's Encrypt来获取免费的证书和密钥。另外,还可以使用自签名证书和密钥。 2. 配置stream模块 在Nginx配置文件中添加stream模块的配置,如下所示: stream { upstream backend { server backend.example.com:443; } server { listen 443; proxy_pass backend; } } 其中,upstream指令定义了将请求转发到哪个后端服务器上,server指令定义了监听的端口和协议,proxy_pass指令定义了转发策略。 3. 配置HTTP反向代理 由于HTTPS协议需要在传输层进行加密,因此我们需要在Nginx的HTTP反向代理上进行解密和加密,并将请求转发stream模块中。 在Nginx配置文件中添加HTTP反向代理的配置,如下所示: server { listen 80; server_name example.com; location / { proxy_pass https://localhost:443; proxy_ssl_verify off; proxy_ssl_protocols TLSv1.2 TLSv1.3; } } 其中,proxy_pass指令定义了转发策略,proxy_ssl_verify指令定义了是否验证服务器证书,proxy_ssl_protocols指令定义了使用的协议版本。 4. 重载Nginx配置 完成以上配置后,需要通过Nginx reload命令来重新加载配置文件。 nginx -s reload 这样,Nginx就可以将收到的HTTPS请求转发至指定的后端服务器上,且能够在传输层进行加密和解密。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值