域名配置服务端口

通过反向代理

配置服务器防火墙规则

如果你在服务器操作系统上开启了防火墙(如 ufwiptables),确保 443 端口已开放:

对于 Ubuntu 的 ufw
sudo ufw allow 443/tcp
sudo ufw reload
对于 CentOS 的 firewalld
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload

是否开启了防火墙?

使用 **ufw**(Ubuntu 或基于 Debian 的系统)
  • 检查防火墙是否启用:
sudo ufw status
  • 返回结果解释:
    • **Status: active**:防火墙已启用。
    • **Status: inactive**:防火墙未启用。

使用 **firewalld**(CentOS/RHEL/Fedora)
  • 检查 firewalld 服务是否运行:
sudo systemctl status firewalld
  • 返回结果解释:
    • 如果输出中包含 Active: active (running),说明防火墙已启用。
    • 如果显示 Inactivenot running,说明防火墙未启用。
  • 另一种方法:
firewall-cmd --state
- 输出 `**running**` 表示防火墙已启用。
- 输出 `**not running**` 表示防火墙未启用。

使用 **iptables**(旧版防火墙工具)
  • 检查防火墙规则:
sudo iptables -L
  • 返回结果解释:
    • 如果列出了多条规则,说明防火墙可能已启用。
    • 如果输出为空或只有默认链(如 ACCEPT),说明防火墙未启用。
    • 例如下面的输出说明防火墙未启用
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 
  • 检查 iptables 服务状态:
sudo systemctl status iptables

配置 HTTPS 证书

如果使用 443 端口(HTTPS),需要配置证书来启用 HTTPS 加密:

  • 免费证书:可以使用 Let’sEncrypt 免费生成证书。
  • 商业证书:从阿里云等平台购买 SSL 证书。
配置证书的常见方法:
  • 如果使用 Nginx:
server {
  listen 443 ssl;
  server_name yourdomain.com;

  ssl_certificate /path/to/your_certificate.crt;
  ssl_certificate_key /path/to/your_private.key;

  location / {
    proxy_pass http://127.0.0.1:8080; # 转发到实际服务端口
  }
}
  • 重新加载 Nginx:
sudo nginx -s reload

验证配置

  • 使用浏览器访问 https://yourdomain.com 检查是否能成功加载你的服务。
  • 如果无法访问,检查域名解析是否正确生效(可以使用 ping yourdomain.com 或 在线工具 测试)。

通过防火墙

使用防火墙直接转发端口:(Linux)

如果不想使用反向代理,可以直接将外部的 80/443 端口映射到服务端口:

使用 **iptables**
  1. 转发 80 端口到 8080:
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
  1. 转发 443 端口到 8443:
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443
  1. 持久化规则:
sudo iptables-save > /etc/iptables/rules.v4

使用 firewalld 配置端口转发:firewalld(CentOS 8)

1. 检查并启用 firewalld
sudo systemctl status firewalld
  • 如果未运行,启动并启用开机自启:
sudo systemctl start firewalld
sudo systemctl enable firewalld
2. 确保转发功能已启用

防火墙的内核转发功能需要启用。

  1. 查看当前转发状态:
sudo sysctl net.ipv4.ip_forward

如果返回 0,表示未启用。

  1. 启用 IP 转发:
sudo sysctl -w net.ipv4.ip_forward=1
  1. 永久启用(修改配置文件):
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
3. 添加端口转发规则
  1. 查看现有的 firewalld 区域:
sudo firewall-cmd --get-active-zones

通常会返回类似 publictrusted 的区域。

  1. 将外部端口(如 80 或 443)转发到内部端口(如 8080 或 8443):
    • 转发 80 到 8080
sudo firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080
- **转发 443 到 8443**:
sudo firewall-cmd --permanent --add-forward-port=port=443:proto=tcp:toport=8443
  1. 重新加载 firewalld 配置:
sudo firewall-cmd --reload
  1. 验证规则是否生效:
sudo firewall-cmd --list-all

4. 测试转发

确保应用程序监听的是目标端口(如 8080 或 8443),然后尝试访问服务器的公网 IP 或域名的 80 和 443 端口,观察是否被正确转发。


附加配置:指定目标地址

如果你的服务运行在特定的内部地址,可以进一步指定目标 IP。

例如,转发到 127.0.0.1:8080

sudo firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toaddr=127.0.0.1:toport=8080

然后重新加载:

sudo firewall-cmd --reload

注意事项

  1. firewalld 规则的优先级: 如果你同时配置了 iptables 或其他网络工具,可能会影响结果。建议在使用 firewalld 时禁用其他工具以避免冲突。
sudo systemctl disable iptables
  1. 安全性: 确保只开放需要的端口,并对其他端口设置严格的访问限制。
  2. 持久化规则: 使用 --permanent 标志保存规则,确保重启后规则不丢失。

通过以上步骤,你可以在 CentOS 8 上使用 firewalld 实现端口转发,避免使用 Nginx 等工具直接连接服务端口。

Nginx

在 CentOS 8 中,安装 Nginx 可以通过官方的 Yum 软件仓库来完成。以下是详细步骤:


1. 检查并更新系统

在安装 Nginx 之前,建议先更新系统软件包。

sudo dnf update -y

2. 安装 Nginx

CentOS 8 默认提供 Nginx 软件包,但版本可能不是最新。如果需要官方最新版本,请先启用官方 Nginx 仓库。

方法一:使用默认的 CentOS 软件仓库
  1. 安装 Nginx:
sudo dnf install nginx -y
  1. 查看安装的 Nginx 版本:
nginx -v
方法二:使用官方 Nginx 仓库

如果需要 Nginx 的最新版本,可以添加官方仓库。

  1. 创建官方 Nginx 仓库文件:
sudo tee /etc/yum.repos.d/nginx.repo <<EOF
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/8/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
  1. 安装 Nginx:
sudo dnf install nginx -y
  1. 验证安装版本:
nginx -v

3. 启动 Nginx 服务

  1. 启动并设置 Nginx 开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
  1. 检查 Nginx 状态:
sudo systemctl status nginx

4. 配置防火墙

确保防火墙允许 HTTP(80)和 HTTPS(443)流量。

  1. 开启 HTTP 和 HTTPS 服务:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
  1. 重新加载防火墙规则:
sudo firewall-cmd --reload
  1. 验证规则是否生效:
sudo firewall-cmd --list-all

5. 测试 Nginx

  1. 打开浏览器,访问服务器的 IP 地址(如 http://your_server_ip)。
    • 如果看到默认的 Nginx 欢迎页面,表示安装成功。
  2. Nginx 默认的根目录是 /usr/share/nginx/html,可以在这里放置静态文件。

6. 配置 Nginx

  1. 配置文件路径:
    • 主配置文件:/etc/nginx/nginx.conf
    • 站点配置文件:/etc/nginx/conf.d/(默认包含 default.conf
  2. 示例配置: 如果你需要配置一个域名到特定端口,可以编辑 default.conf
sudo nano /etc/nginx/conf.d/default.conf

添加以下内容:

server {
  listen 80;
  server_name yourdomain.com;

  location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }
}
  1. 测试配置是否正确:
sudo nginx -t
  1. 重启 Nginx:
sudo systemctl restart nginx

卸载 Nginx(可选)

如果需要卸载 Nginx:

sudo dnf remove nginx -y

通过以上步骤,你可以在 CentOS 8 上成功安装并配置 Nginx,将其用于反向代理或静态文件服务。

BindException: Permission denied

如果想要直接使用80端口,需要注意权限问题,报错如下:

Caused by: java.net.BindException: Permission denied

java.net.BindException: Permission denied 错误通常发生在 Java 应用程序试图绑定一个端口时,操作系统拒绝了该操作。在你的情况下,这个错误是由于尝试绑定到 80 端口(即 HTTP 默认端口)导致的。

原因可能是以下几点:

1. 需要管理员权限

在 Linux 系统中,端口号小于 1024 被视为 “特权端口”。这些端口通常只能由 root 用户或者拥有管理员权限的进程绑定。因为 80 端口是一个特权端口,普通用户没有足够的权限直接绑定它。

解决方法

  • 使用 sudo 或者以 root 用户身份运行 Java 程序。例如:
sudo java -jar your-application.jar

2. 端口已被占用

另一个可能的原因是端口 80 已经被其他程序占用。你可以检查端口是否被其他进程占用:

检查端口占用情况

sudo netstat -tuln | grep ':80'

或者使用 ss 命令:

sudo ss -tuln | grep ':80'

如果端口 80 被占用,你需要停止占用该端口的服务,或者将你的应用配置为使用其他端口。

3. 防火墙或安全组规则

如果你的云服务器启用了防火墙或安全组规则,可能会阻止你访问 80 端口。确保安全组、iptables 或任何防火墙软件允许来自外部的 80 端口流量。

检查防火墙设置

  • 如果使用 iptables,查看规则:
sudo iptables -L
  • 如果使用云服务商提供的安全组,请检查云控制台中对应的端口规则,确保 80 端口对外开放。

4. SELinux 或 AppArmor 限制

如果你使用的是 CentOS、RHEL 或其他 Linux 发行版,可能启用了 SELinux,SELinux 的安全策略也可能阻止进程绑定到低端口。你可以通过查看 SELinux 的日志来确认这一点,或者临时禁用 SELinux 进行测试。

检查 SELinux 状态

sudo sestatus

如果启用了 SELinux,并且你怀疑是它造成的阻止,可以尝试暂时禁用它:

sudo setenforce 0

如果禁用 SELinux 后可以正常绑定端口 80,则可以调整 SELinux 策略以允许该操作。

5. 云提供商的限制

某些云服务提供商可能会对基础服务端口(如 80 端口)进行限制,尤其是如果你使用的是非管理员账户或没有配置正确的网络策略。确保你的云服务账户有足够的权限来绑定这些端口。

总结

你遇到的 Permission denied 错误很可能是因为你没有足够的权限绑定特权端口(如 80 端口)。要解决此问题,你可以:

  • 以 root 用户或通过 sudo 运行 Java 应用程序;
  • 确保没有其他进程占用该端口;
  • 检查防火墙和安全组规则;
  • 如果使用 SELinux,检查并调整策略。

如果你希望绑定到 80 端口,但不想以 root 身份运行 Java 应用,可以考虑使用端口转发工具,如 iptablesauthbind,将 80 端口的流量转发到高于 1024 的端口上。

检查服务器的防火墙设置

服务器防火墙配置:在服务器上,检查防火墙规则是否允许端口(443)接受来自外部的连接。可以使用以下命令查看防火墙状态:

sudo firewall-cmd --list-all

如果 443 端口没有在防火墙规则中开放,可以运行以下命令开放端口:

sudo firewall-cmd --add-port=443/tcp --permanent
sudo firewall-cmd --reload

使用命令行验证 SSH 隧道

  • 为了排查问题,可以手动创建 SSH 隧道,验证是否能够正常连接。

在本地打开一个终端,运行以下命令(替换成你自己的 SSH 用户和服务器地址):

ssh -L 3443:localhost:443 your_user@your_server_ip -p your_ssh_port

这样会将本地端口 3443 映射到服务器上的端口 443。如果隧道创建成功,你可以尝试从 ssh 使用 localhost:3443 来连接服务器443端口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值