使用nginx让nps内网穿透的网站支持https

视频版:

00.nps配置

因为nginx需要监听80与443端口,而nps的http和https默认代理端口也是80与443端口,所以我们需要修改nps的配置

进入nps的根目录,本人这里是/opt/nps/,但是很多人是/etc/nps

进入conf文件夹,编辑nps.conf文件,找到以下代码块

#HTTP(S) proxy port, no startup if empty
http_proxy_ip=0.0.0.0
http_proxy_port=80
https_proxy_port=443
https_just_proxy=true

将其中的80和443端口改成你想要的就可以了,https可以留空,因为我们直接用nginx强制使用https即可,就不需要https代理了

然后重启nps:

sudo systemctl restart nps

我这里将http代理端口设置为8010,https端口设置为空

01.新建域名解析(如果之前没有)

这里的主机指的是用户访问的地址,也就是用户输入地址栏的地址。只有nps识别到用户从主机一模一样的域名进来,才会给你内网穿透

02.nginx与nps配合的配置

先上配置文件(里面的charsama.cn要改为你自己的域名):

events {
    worker_connections 1024;
}

http {
    # 1. 主域名的 HTTP 重定向到 HTTPS
    server {
        listen 80;
        server_name charsama.cn;
        return 301 https://charsama.cn$request_uri;
    }

    # 2. 强制将 www.charsama.cn 的 HTTP 重定向到 HTTPS 主域名
    server {
        listen 80;
        server_name www.charsama.cn;
        return 301 https://charsama.cn$request_uri;
    }

    # 3. 强制将 HTTPS 的 www.charsama.cn 重定向到主域名
    server {
        listen 443 ssl;
        server_name www.charsama.cn;
        ssl_certificate /etc/nginx/conf.d/charsama.cn/fullchain.pem;
        ssl_certificate_key /etc/nginx/conf.d/charsama.cn/privkey.pem;
        return 301 https://charsama.cn$request_uri;
    }

    # 4. 主域名 HTTPS 配置
    server {
        listen 443 ssl;
        server_name charsama.cn;
        ssl_certificate /etc/nginx/conf.d/charsama.cn/fullchain.pem;
        ssl_certificate_key /etc/nginx/conf.d/charsama.cn/privkey.pem;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
        ssl_prefer_server_ciphers on;
        add_header Strict-Transport-Security "max-age=31536000";

        access_log /var/log/nginx/charsama.cn.https.log;

        location / {
            proxy_pass http://127.0.0.1:8010;
            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_set_header X-Forwarded-Proto $scheme;
        }
    }
}

前面三个都是用于强制跳转的,效果大概是:

https://charsama.cn       -> https://charsama.cn
http://www.charsama.cn   -> https://charsama.cn
https://www.charsama.cn  -> https://charsama.cn

最后一个server中的proxy_pass http://127.0.0.1:8010;就是将请求发送到nps大的http代理端口,我之前设置的是8010,你们如果设置的是其它端口就设置为proxy_pass http://127.0.0.1:[其它端口];

原理就是,你给nps发送了用户的host,也就是用户访问的主机名,然后nps通过8010端口接收并从域名解析中对比主机名,哪个对上了就内网穿透哪一个

        ssl_certificate /etc/nginx/conf.d/charsama.cn/fullchain.pem;
        ssl_certificate_key /etc/nginx/conf.d/charsama.cn/privkey.pem;

这两行是证书,我们等会就会去申请

将这些配置修改成你的域名之后,进入nginx根目录

cd /etc/nginx

把上面的所有内容(你修改过后的)全部替换你nginx.conf里面的内容(如果你曾经修改过里面的东西请酌情保留)

03.申请证书

进入 https://httpsok.com/ 网页(如果不介意的话可以进入我的邀请页面https://httpsok.com/p/4ODl,虽然对我帮助可能不是特别大但是羊毛谁不爱薅呢?)

找到证书管理,点击免费申请证书(才发现我做演示申请的证书也被算进免费额度里了)

按照httpsok网站提供的指示,填写域名cname的记录,直接复制粘贴就好了(

保存之后直接验证,验证通过后就可以直接申请了,申请完毕之后我们回到证书管理页面,下载证书,直接下载nginx版本的。可以先点击下载之后复制下载链接,然后到服务器使用wget [下载链接],然后unzip解压,也可以直接通过其他应用上传到服务器里

进入nginx的conf.d文件夹,一般是/etc/nginx/conf.d/

cd /etc/nginx/conf.d

在此处创建一个与你域名相同的文件夹

mkdir domain.com(替换成你的域名)

进入这个文件夹

cd domain.com(替换成你的域名)

然后把你刚才下载的证书(解压过后的.pem文件)移动到这里(或者直接在这里下载也行)

然后返回到nginx根目录

cd /etc/nginx

我们再次打开httpsok网站找到自动部署,复制nginx的自动部署命令,大概长这个样子(每个人的都不一样,不要复制我的!!)

curl -s https://get.httpsok.com/ | bash -s 9aN0RN3y4hczqP9wL4

注意:非root用户要在bash前面加上sudo,大概是这样子:

curl -s https://get.httpsok.com/ | sudo bash -s 9aN0RN3y4hczqP9wL4

然后你会看到这样的回应,如果不是那你就失败了(

如果出现相同的回应,就说明你成功了。

完事了之后重启下nginx:

sudo systemctl restart nginx

访问你的域名,这个时候你应该看到你的网站正常运行,并且具有https保护

04.一些小问题

wordpress(或者其他服务)如果出现资源缺失等问题请开启wordpress的https模式

修改wordpress根目录(或者docker容器内的wp-config.php)

添加这三行就行了:

$_SERVER['HTTPS'] = 'on';
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

知识共享许可协议


本文由 CharSaMa's blog 创作,采用

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议(CC BY-NC-SA 4.0)
授权。




  • 允许行为:标注作者及原文出处,衍生内容需沿用相同协议

  • 禁止行为:商业用途(包括广告、付费内容、商品推广等)



© 2025 CharSaMa's blog。协议全文:法律文本

评论

  1. 博主
    2 月前
    2025-3-08 10:36:28

    有什么困难的话可以发评论讨论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇