supervisor+frp+nginx搭建HTTP/HTTPS内网穿透服务

334 阅读2分钟

frp开源仓库:github.com/fatedier/fr…

supervisor开源仓库:github.com/Supervisor/…

nginx开源仓库:github.com/nginx/nginx

前言

在做微信小程序的时候发现每次都要传文件到服务器上,然后再跑起来服务,调用接口的时候想看日志还得要去服务器上看,整个流程实在是非常的麻烦,去想了一下该怎么处理这个问题,结合之前用过的frp可以做内网穿透,那么能不能用nginx转发到frp的服务端口呢?

服务端配置

frp配置

服务端frps.ini文件

[common]
;tcp信号传输端口
bind_port = 7000
;接收http服务的端口
vhost_http_port = 8006
;用来验证是自己的信号的token
auth_token = token

;服务类型
type = http
;你的服务器地址,此处由于做了nginx转发,且转发到的是127.0.0.1,所以这里就写127.0.0.1
custom_domains = 127.0.0.1

supervisor配置

supervisor.conf配置载入子文件夹中的所有.ini文件

[include]
files = supervisord.d/*.ini

frps.ini文件配置如下

[program:frps]
;启动用户
user=root
;启动路径
directory=/root/frp_0.42.0_linux_amd64
;具体命令
command=/usr/bin/zsh -c './frps -c ./frps.ini'
;是否开机自启动
autostart=true
;遇到错误是否重启
autorestart=true

nginx配置

user root;
worker_processes  1;
error_log  logs/error.log  info;

# pid  logs/nginx.pid;

events {
    worker_connections  1024;
}

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

    # 防止带有下划线的请求头被忽略
    underscores_in_headers on;

    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  logs/access.log  main;

    sendfile        on;
    # tcp_nopush     on;

    keepalive_timeout  65;
    client_max_body_size 10m;  
    # gzip  on;
    # HTTP server
    server {
        listen  80;
        server_name  your.domain.com;
        return 301 https://your.domain.com$request_uri;
    }
    # HTTPS server
    server {
        listen       443 ssl;
        server_name  alnda.cn;

        ssl_certificate      /ssl/cert/ssl.cn.pem;
        ssl_certificate_key  /ssl/cert/ssl.cn.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  10m;
    
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        location /frp/ {
            proxy_pass http://127.0.0.1:8006/;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Host $remote_addr;
        }
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

本地(客户端)配置

frp配置

客户端frpc.ini文件

[common]
;你的远程服务器ip地址
server_addr = 43.231.52.81
;不要动,这是固定tcp端口号
server_port = 7000
;用来验证是你的服务器的token,和服务器上的保持一致
auth_token = token	

[web]
type = http
local_port = 8000
custom_domains = 127.0.0.1

通过如下命令启动

./frpc -c ./frpc.ini

结果

由于nginx开启啦https,所以访问服务器域名即可访问到本地服务

开始快乐的穿透模式吧!

还可以用来做调试哦~