轻量级 HTTP 到 HTTPS 重定向

轻量级 HTTP 到 HTTPS 重定向

我们正在运行 Proxmox 服务器,我已使用 IPTables 配置该服务器,将端口 443 重定向到 proxmox 端口 8006。重定向任何试图访问的人的最轻松方法是什么http://proxmox.example.comhttps://proxmox.example.com。只是为了进行 http 重定向而在系统上设置整个 Web 服务器,这感觉有点可惜。

答案1

最小:

while true ; do nc -l -p 80 \
  -c 'echo -e "HTTP/1.1 302 Moved Temporarily\nLocation: https://yourhost.example.com/\n\n"' ; done

虽然我已经通过 xinetd 运行它(并重定向到端口 8006 而不是弄乱 iptables):

#!/bin/bash

echo -e "HTTP/1.1 302 Moved Temporarily\nLocation: https://yourhost.example.com:8006/\n\n"

答案2

由于@symcbean提到使用systemd套接字而不是xinetd,并且我偶然发现了同样的问题,所以我将发布我的解决方案。

需要放入两个文件/etc/systemd/system

假设我们给这个服务起个名字[email protected](注意结尾的@),每次收到请求时都会执行systemd

[Unit]
Description=Redirect HTTP to HTTPS

[Service]
ExecStart=/usr/bin/echo -e "HTTP/1.0 302 Moved Temporarily\r\nLocation: https://proxmox.example.com/\r\n\r\n"
StandardInput=socket

socket单元文件告知systemd端口accept()80 上的 并调用[email protected]来处理传入连接。它需要命名为http-to-https.socket

[Unit]
Description=Redirect HTTP to HTTPS

[Socket]
ListenStream=80
Accept=yes

[Install]
WantedBy=sockets.target

现在只需运行

# systemctl enable http-to-https.socket

systemd会愉快地完成这项工作。

答案3

如果您想要执行简单的 HTTP 到 HTTPS 重定向,而又不想为此设置完整的 Web 服务器,则可以使用 Nginx 以最少的配置实现此目的。操作方法如下:

安装Nginx:您可以在 Proxmox 服务器上安装 Nginx。您可以使用包管理器来执行此操作。例如,在基于 Debian 的系统上:

sudo apt update

sudo apt install nginx

创建配置文件:创建一个简单的 Nginx 配置文件用于重定向。您可以在 /etc/nginx/sites-available/ 目录中创建一个新的配置文件,例如 proxmox:

sudo vi /etc/nginx/sites-available/proxmox

在文件中添加以下配置:

server {
    listen 80;
    server_name proxmox.example.com;

    location / {
        return 301 https://$host$request_uri;
    }
}

此配置在端口 80 上监听对 proxmox.example.com 的请求,并发出永久 (301) 重定向到等效的 HTTPS URL。

然后启用配置并创建符号链接以启用此配置,然后测试配置:

sudo ln -s /etc/nginx/sites-available/proxmox  /etc/nginx/sites-enabled/

然后测试你的 Nginx 配置是否没有冲突

sudo nginx -t

如果没有冲突,则只需软重新加载您的 Nginx。

sudo nginx -s reload

我希望这对你有用。

相关内容