家庭网络非80端口访问以及cloudflare页面规则配置实现不加端口随意访问

家宽nginx反代https网站建设 利用页面规则实现不用80端口也可访问

0x01 环境

1、一台 linux 主机

2、电信网

3、路由器(分配有公网 ip)

0x02 nginx 反代 部署

2.1 原理

反向代理即把内网服务映射到公网地址上。(优点,可以直接公网地址访问)

正向代理即你挂公网主机的 vpn,然后访问内网。(缺点,要挂 vpn)

2.2 nginx 部署反向代理

我内网有多个应用,我的路由器获得了公网 ip 地址(没有就百度想办法)。路由器开启端口转发,即可用 `公网ip:端口` 访问内网资源。注意公网端口不要用 ==80、443==​,因为国内运营商为了防止家宽建站把这些封了。只要换其他端口就可以使用。

2.21 安装 nginx 环境

这步网上很多教程,我是用 docker 的方式安装,你也可以使用 `apt install nginx` 命令一步到位安装

主要用到的文件有 `/etc/nginx/nginx.conf` ` /etc/nginx/conf.d/default.conf`
参考公网环境

1、域名和端口:domain.myhost.com:2333

2、路由映射:2333 <-> linux主机ip:443

2.22 nginx 配置

更改配置前记得备份。`cp nginx.conf .nginx.conf.bak `

先编辑 nginx.conf 文件,设置 upstream 负载均衡,再添加 server 服务器。

为什么不去 `/etc/nginx/conf.d/` 目录下添加配置文件呢,因为那样我需要把 ssl 证书重新写一遍。但那样也会灵活一些。两种方式看你们吧

方式一(我的方式)

1、打开 nginx.conf vim /etc/nginx/nginx.conf

2、添加配置,我的配置信息已经脱敏处理了。不要有其他想法哦

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


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

    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;

    #ssl配置(23行-28行)不用可以不写,不然找不到证书路径会报错
    ssl_certificate /etc/nginx/ssl/*.myhost.com/fullchain.cer;
    ssl_certificate_key /etc/nginx/ssl/*.myhost.com/*.myhost.com.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

	# 添加名为domain的负载均衡服务
    upstream domain{
      ip_hash;
	# server 写要反向代理的服务器,可以是域名,也能有多个server
      server 192.168.1.1:9000;
  }
	# 启动服务,监听端口,进行方向代理
    server {
	# 没有ssl的直接 listen 80;
      listen 443 ssl;
	# 这里即从公网访问来的域名,每个http请求都会有个host字段,nginx可以读取这字段进行转发
      server_name domain.myhost.com;
	# 启用路径服务,将根目录代理到名为 domain 的负载均衡服务
      location / {
      proxy_pass http://domain;
      }
	# 启用跳转,$http_host保留端口,将http请求变成https请求,建议开启ssl的写,不然 http:域名:端口 会出现错误
      error_page 497 301 https://$http_host$request_uri;

	# 有网盘需求的添加以下配置:1、分别为nginx不缓存请求    2、不设置客户端能传送的最大数据
	# 不添加可能出现传不了文件的情况
	#proxy_request_buffering off;
      	#client_max_body_size 0;
   }

	# 如果需要添加多几个服务,也是一样的
    upstream domain2{
      ip_hash;
      server 192.168.1.1:9000;
  }
    server {
      listen 443 ssl;
      server_name domain2.myhost.com;
      location / {
      proxy_pass http://domain2;
      proxy_set_header Host $http_host;
      }
      error_page 497 301 https://$http_host$request_uri;
    }
}

配置好后执行 systemctl nginx restart 或者 docker restart nginx(你的容器名字)

0x03 cloudflare 页面规则实现不添加端口访问服务

上面配置好后,外网访问 `http://domain.myhost.com:2333` 即可访问到内网对应服务器 domain,访问 `http://domain2.myhost.com:2333` 即可访问到服务器 domain2

但是有没有办法实现:`domain.myhost.com` `domain2.myhost.com` 不添加端口直接访问到对应服务器呢?这就要用到页面规则了

页面规则即你的 dns 服务商,比如腾讯的 dnspod 阿里的 alibaba dns 等。使用这功能的前提是你有两个域名,这样你就可以设置另外一个域名,比如 `domain.a.com` 跳转到 `http://domain.b.com:2333`

是的,即 301 跳转到某个 url 页面。

cloudflare 页面规则配置如下

1、登录 cloudflare,选择你的另外一个域名 a.com,

2、 点击创建页面规则

3、 输入如下

含义解释

* 代表任意字符

$1 表示第一处的任意字符替换

$2 表示第二次的任意字符替换

当你输入 www.a.com/index.php 时,$1 的值为 www. $2 的值为 index.php

可以实现不同子域的跳转

dns 配置如下

分别添加如下记录,一定要点亮小云朵

名称分别分别为 www @ * 内容写 8.8.8.8

至此访问 domain.a.com 即可跳转到 http://domain.myhost.com:2333

posted @ 2022-09-30 13:03  Throokie  阅读(6320)  评论(1编辑  收藏  举报