通过外网访问内网网站

内网搭建网站,服务器搭建vpn(l2tp/ipsec)、nginx      (实测)

将公网的访问请求通过vpn隧道转到内网

nginx配置文件修改

    server {
        listen       80;
        server_name  wap.renpin.org;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            proxy_set_header  X-Real-IP $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for ;
            proxy_pass http://192.168.18.2:80;  #内网地址

        }

参考:http://blog.sina.com.cn/s/blog_a26e6d690102wgl3.html

**********************************************************************************************************************

wiki

一.简介

场景:
当后端服务器不直接面对客户,就需要代理了。这样的好处是代理可以进行缓存,加速访问,或者对访问进行负载均衡,做各种策略。

原理:
访问时 浏览器–反向代理–后端服务器,返回时 后端服务器–反向代理–浏览器

二.配置

反向代理

server {
    listen 80;
    server_name localhost;
    charset utf-8;

    location / {
        proxy_set_header  Host $host;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for ;
        proxy_set_header Accept-Encoding "";
        # 应用服务器 HTTP 地址
        proxy_pass http://192.168.0.112:8080;
        }
}

反向代理websocket

关于什么是websocket在知识普及版块有说明

在这里,我们看到客户端和服务器能够通过作为代理的NGINX进行通信,并且消息可以继续来回发送,直到客户端或服务器断开连接。

让NGINX正确处理WebSocket所需要的是正确设置头文件来处理将连接从HTTP升级到WebSocket的升级请求。

upstream websocket {
    server 192.168.100.10:8010; #后端WebSocket程序
}

server {
    listen 8010; #端口一般是对等的
    server_name xx;

    location / {
        proxy_pass http://websocket;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade; #升级http协议
        proxy_set_header Connection $connection_upgrade;
    }
}

负载均衡

当后端服务器不够用时,将使用负载均衡技术,将请求分发

#1.配置负载池子
upstream myapp {
    server 192.168.0.111:8080; # 应用服务器 1
    server 192.168.0.112:8080 bak; # 应用服务器 2,表示只有其他机器都繁忙或者坏掉,才用这台
    server 192.168.0.113:8080 down #表示暂不参与
}

#2.调用池子
server {
    listen 80;
    server_name xx;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://myapp; #池子名
    }
}

反向代理https

轮询策略

权重轮询

#指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

upstream backserver {
    server 192.168.0.14 weight=10;
    server 192.168.0.15 weight=10;
}

ip_hash

#每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream backserver {
    ip_hash;
    server 192.168.0.14:88;
    server 192.168.0.15:80;
}

fair(第三方)

#按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream backserver {
    server server1;
    server server2;
    fair;
}

url_hash(第三方)

#按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

upstream backserver {
    server squid1:3128;
    server squid2:3128;

    hash $request_uri;
    hash_method crc32;
}

三.技巧

在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。

假设下面四种情况分别用 http://192.168.1.1/proxy/test.html 进行访问。

第一种:
location /proxy/ {
    proxy_pass http://127.0.0.1/;
}
代理到URL:http://127.0.0.1/test.html

第二种(相对于第一种,最后少一个 / )
location /proxy/ {
    proxy_pass http://127.0.0.1;
}
代理到URL:http://127.0.0.1/proxy/test.html

第三种:
location /proxy/ {
    proxy_pass http://127.0.0.1/aaa/;
}
代理到URL:http://127.0.0.1/aaa/test.html

第四种(相对于第三种,最后少一个 / )
location /proxy/ {
    proxy_pass http://127.0.0.1/aaa;
}
代理到URL:http://127.0.0.1/aaatest.html

四.参数

#请求头为空的字段,将不传递给后端服务器。
proxy_set_header Accept-Encoding "";

#将端口,访问ip等传递给后端服务器。否则后端将只能看到nginx的访问。
proxy_set_header Host $host:$server_port;
#只传一层客户端的值,如果前面有代理,相当于2层代理,就只传代理的ip了。
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-PORT $remote_port;

#如果前面还有代理,nginx1-nginx2-php程序,那nginx2这层将给php程序nginx1的地址还有客户端的地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

 #关闭缓存,将加快交互
proxy_buffering off;

#指定哪个网卡链接后端服务器
proxy_bind 127.0.0.2;

 #存放http报文头的哈希表容量上限,默认为512个字符
proxy_headers_hash_max_size 1024;

 #设置头部哈希表大小 默认为64
proxy_headers_hash_bucket_size 128;

# 应用服务器 HTTP 地址
proxy_pass http://192.168.0.112:8080;

#缓冲区代理缓冲用户端请求的最大字节数,可以理解为保存到本地再传给用户
client_body_buffer_size 512k;

#nginx 跟后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 5;

#这个指定设置了发送请求给upstream服务器的超时时间。超时设置不是为了整个发送期间,而是在两次write操作期间。如果超时后,upstream没有收到新的数据,nginx会关闭连接
proxy_send_timeout 60;

#该指令设置与代理服务器的读超时时间。它决定了nginx会等待多长时间来获得请求的响应。这个时间不是获得整个response的时间,而是两次reading操作的时间。
proxy_read_timeout 10;

#设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffer_size 16k;

#proxy_buffers 缓冲区,网页平均在 64k 以下的话,这样设置
proxy_buffers 4 64k;

#高负荷下缓冲大小(proxy_buffers*2)
proxy_busy_buffers_size 128k;

#设定缓存文件夹大小,大于这个值,将从 upstream 服务器传递请求,而不缓冲到磁盘
proxy_temp_file_write_size 128k;

#不允许代理端主动关闭连接
proxy_ignore_client_abort on;

#未知
proxy_redirect off;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IPv6是下一代的互联网协议,相对于IPv4来说,它提供了大量的IP地址,使得每个设备都能够拥有独立的地址。在IPv6环境下,外网访问内网服务器相对而言更加简单和方便。 首先,内网服务器需要获得一个公网IPv6地址才能够被外网访问到。这可以通过互联网服务提供商(ISP)或者其他IPv6地址服务提供商获得。一旦获得了公网IPv6地址,就可以将其分配给内网服务器。 其次,需要在路由器或者防火墙上进行相应的配置。由于IPv6的地址数量庞大,一般不会出现地址的短缺问题,因此没有必要进行网络地址转换(NAT)。但是,需要进行端口转发(Port Forwarding)的配置,以确保外网请求能够正确到达内网服务器。 然后,需要正确设置服务器的防火墙规则。确保防火墙允许外部的IPv6请求流量进入内部网络,并将请求正确地路由到内网服务器。同时,也需要考虑服务器的安全性,设置适当的安全措施,例如访问控制列表(ACL)等,以防止潜在的攻击。 最后,为了方便外网访问内网服务器,可以使用DNS(域名系统)服务将内网服务器的IPv6地址映射到一个易于记忆的域名上。这样,用户只需要输入域名即可访问内网服务器,而无需记住复杂的IPv6地址。 总的来说,IPv6环境下外网访问内网服务器相对简单,主要需要获得公网IPv6地址、进行端口转发配置、设置防火墙规则,并使用DNS服务提供域名解析。通过这些步骤,用户就能够方便地访问内网服务器

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值