連接埠配置教程

學習如何修改常見軟體的連接埠配置,掌握Docker連接埠映射技巧

常見軟體連接埠修改

Nginx 連接埠修改

修改 Nginx 監聽連接埠,避免與其他服務衝突

# 編輯 nginx.conf 文件
sudo nano /etc/nginx/nginx.conf

# 修改 listen 指令
server {
 listen 8080; # 從默認的 80 改為 8080
 listen [::]:8080;
 
 server_name _;
 # ... 其他配置
}

# 重啟 Nginx
sudo systemctl restart nginx
記得在防火牆中開放新連接埠:sudo ufw allow 8080

Apache 連接埠修改

修改 Apache HTTP 伺服器的監聽連接埠

# 編輯連接埠配置文件
sudo nano /etc/apache2/ports.conf

# 修改 Listen 指令
Listen 8080 # 從默認的 80 改為 8080

# 編輯虛擬主機配置
sudo nano /etc/apache2/sites-available/000-default.conf

<VirtualHost *:8080>
 # ... 其他配置
</VirtualHost>

# 重啟 Apache
sudo systemctl restart apache2

MySQL 連接埠修改

修改 MySQL 資料庫伺服器的監聽連接埠

# 編輯 MySQL 配置文件
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

# 找到並修改 port 配置
[mysqld]
port = 3307 # 從默認的 3306 改為 3307
bind-address = 127.0.0.1

# 重啟 MySQL 服務
sudo systemctl restart mysql

# 連接時指定新連接埠
mysql -u root -p -P 3307

SSH 連接埠修改

修改 SSH 服務連接埠,提高伺服器安全性

# 編輯 SSH 配置文件
sudo nano /etc/ssh/sshd_config

# 找到並修改 Port 配置
Port 2222 # 從默認的 22 改為 2222

# 重啟 SSH 服務
sudo systemctl restart sshd

# 使用新連接埠連接
ssh user@server -p 2222
⚠️ 修改前請確保防火牆已開放新連接埠,避免被鎖定在伺服器外

Node.js 應用連接埠配置

配置 Node.js 應用的監聽連接埠

# 在程式碼中設置連接埠
const port = process.env.PORT || 3001;
app.listen(port, () => {
 console.log(`Server running on port $${port}`);
});

# 使用環境變數啟動
PORT=3001 node app.js

# 或在 package.json 中配置
{
"scripts": {
"start":"PORT=3001 node app.js",
"dev":"PORT=3001 nodemon app.js"
 }
}

Docker 連接埠映射

學習 Docker 容器的連接埠映射配置

# 映射單個連接埠
docker run -p 8080:80 nginx

# 映射多個連接埠
docker run -p 8080:80 -p 8443:443 nginx

# Docker Compose 配置
version: '3.8'
services:
 web:
 image: nginx
 ports:
 -"8080:80" # 主機連接埠:容器連接埠
 -"127.0.0.1:8081:80" # 綁定到特定IP

實用技巧和工具

連接埠佔用檢測

檢查連接埠是否被佔用的常用命令

# Linux/macOS 檢查連接埠佔用
netstat -tulpn | grep :8080
lsof -i :8080
ss -tulpn | grep :8080

# Windows 檢查連接埠佔用
netstat -ano | findstr :8080
Get-NetTCPConnection -LocalPort 8080

# 殺死佔用連接埠的進程
kill -9 $(lsof -t -i:8080) # Linux/macOS
taskkill /PID <PID> /F # Windows

防火牆連接埠開放

在不同作業系統中開放連接埠的方法

# Ubuntu/Debian (UFW)
sudo ufw allow 8080
sudo ufw allow 8080/tcp
sudo ufw allow from 192.168.1.0/24 to any port 8080

# CentOS/RHEL (firewalld)
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp

# iptables
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4

# 查看防火牆狀態
sudo ufw status
sudo firewall-cmd --list-all

連接埠轉發技術

使用不同工具進行連接埠轉發

# SSH 連接埠轉發
ssh -L 8080:localhost:80 user@remote-server
ssh -R 8080:localhost:80 user@remote-server # 反向轉發

# socat 連接埠轉發
socat TCP-LISTEN:8080,fork TCP:localhost:80

# nginx 反向代理
server {
 listen 8080;
 location / {
 proxy_pass http://localhost:3000;
 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 }
}

# netcat 連接埠轉發
mkfifo backpipe
nc -l 8080 0<backpipe | nc localhost 80 1>backpipe

開發環境連接埠管理

開發環境中的連接埠規劃和管理技巧

# 推薦的開發連接埠分配
3000-3099 # 前端開發伺服器
4000-4099 # 後端 API 服務
5000-5099 # Python/Flask 應用
8000-8099 # 通用 Web 服務
9000-9099 # 監控和工具

# 使用環境變數管理連接埠
# .env 文件示例
FRONTEND_PORT=3000
BACKEND_PORT=4000
DATABASE_PORT=5432
REDIS_PORT=6379

# docker-compose.yml 中使用環境變數
services:
 frontend:
 ports:
 -"$${FRONTEND_PORT}:3000"
 backend:
 ports:
 -"$${BACKEND_PORT}:4000"