溫馨提示×

CentOS中Node.js網絡配置技巧

小樊
38
2025-10-03 03:42:18
欄目: 編程語言

CentOS中Node.js網絡配置技巧

一、基礎網絡配置

1. 配置Node.js應用監聽地址與端口

Node.js應用需明確監聽的IP地址和端口才能接收網絡請求。若要讓應用監聽所有網絡接口(允許外部訪問),可將監聽地址設置為0.0.0.0;若僅限本地訪問,則用127.0.0.1。例如:

const express = require('express');
const app = express();
const port = 3000; // 可修改為所需端口
app.get('/', (req, res) => res.send('Hello World.'));
app.listen(port, '0.0.0.0', () => console.log(`Server running at http://0.0.0.0:${port}/`));

若需綁定到特定內網IP(如192.168.1.100),只需替換地址即可:

app.listen(port, '192.168.1.100', () => console.log(`Server running at http://192.168.1.100:${port}/`));

2. 防火墻設置(firewalld)

CentOS默認使用firewalld管理防火墻,需開放Node.js應用的端口(如3000)以允許外部訪問。操作步驟如下:

# 永久添加端口(以3000為例)
sudo firewall-cmd --permanent --zone=public --add-port=3000/tcp
# 重新加載防火墻配置使更改生效
sudo firewall-cmd --reload

驗證端口是否開放:

sudo firewall-cmd --zone=public --query-port=3000/tcp # 返回yes表示開放

3. SELinux配置(若啟用)

若系統啟用SELinux,可能會阻止Node.js綁定到非標準端口(如3000)??赏ㄟ^以下命令臨時允許:

sudo setenforce 0 # 臨時設置為寬容模式(重啟后失效)

如需永久允許,可調整SELinux布爾值:

sudo setsebool -P httpd_can_network_connect 1 # 允許HTTP服務網絡連接

若仍無法解決,可創建自定義SELinux策略模塊(需根據具體錯誤信息調整)。

二、系統級網絡優化

1. 調整文件描述符限制

Node.js處理高并發時需大量文件描述符,需增加系統限制。臨時設置(當前終端有效):

ulimit -n 65535

永久設置(對所有用戶生效):編輯/etc/security/limits.conf,添加以下內容:

* soft nofile 65535
* hard nofile 65535

其中*表示所有用戶,soft為軟限制(可臨時超過),hard為硬限制(最大值)。

2. 優化內核參數

編輯/etc/sysctl.conf,添加以下參數以提升網絡性能:

# 增加TCP連接隊列大小
net.core.somaxconn = 65535
# 增加SYN隊列大小,減少SYN flood攻擊影響
net.ipv4.tcp_max_syn_backlog = 65535
# 擴大可用端口范圍
net.ipv4.ip_local_port_range = 1024 65535
# 啟用TIME-WAIT端口復用,減少端口耗盡
net.ipv4.tcp_tw_reuse = 1
# 縮短TIME-WAIT狀態超時時間(秒)
net.ipv4.tcp_fin_timeout = 30

保存后執行sysctl -p使配置生效。

三、使用反向代理(以Nginx為例)

反向代理可提升性能(如緩存靜態文件)、增強安全性(隱藏Node.js端口)及實現負載均衡。安裝Nginx:

sudo yum install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx

配置反向代理(編輯/etc/nginx/conf.d/nodejs.conf):

server {
    listen 80;
    server_name your_domain.com; # 替換為域名或IP
    
    location / {
        proxy_pass http://localhost:3000; # 轉發到Node.js應用
        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;
    }
    
    # 可選:緩存靜態文件,減輕Node.js壓力
    location /static/ {
        alias /path/to/static/files/;
        expires 30d; # 緩存30天
    }
}

重新加載Nginx配置:

sudo systemctl reload nginx

四、負載均衡(可選)

若需處理高并發,可使用Nginx實現多Node.js實例負載均衡。首先啟動多個Node.js進程(如使用cluster模塊),再配置Nginx:

upstream nodejs_backend {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
}

server {
    listen 80;
    server_name your_domain.com;
    
    location / {
        proxy_pass http://nodejs_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

upstream模塊會自動分配請求到多個后端實例,提升整體吞吐量。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女