博主小白痒钝,第一次部署前端vue打包后的dist項(xiàng)目痴昧,已知該dist使用hash模式打包帆卓,部署在阿里云centos系統(tǒng)上巨朦,使用docker+nginx容器部署米丘;
問(wèn)題:部署好之后容器內(nèi)執(zhí)行curl http://127.0.0.1:80可以獲取到頁(yè)面,但是在宿主機(jī)通過(guò)curl http://宿主機(jī)ip:881端口訪問(wèn)不到數(shù)據(jù)
一糊啡、排查可能原因1:nginx.conf文件沒(méi)有寫好;
一開始
listen
只寫了80后來(lái)了解到只寫80的話他就只監(jiān)聽本地回環(huán)地址127.0.0.1,所以改為了0.0.0.0:80,
下面是修改后的nginx.conf文件
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server {
# listen 標(biāo)識(shí)了監(jiān)聽的ip和端口拄查;
listen 0.0.0.0:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
include /etc/nginx/conf.d/*.conf;
}
還是不行,后邊覺(jué)得可能是防火墻的原因棚蓄,所以執(zhí)行sudo firewall-cmd --permanent --list-all
發(fā)現(xiàn)防火墻是關(guān)閉狀態(tài)堕扶;
接著咨詢AI發(fā)現(xiàn)還有個(gè)iptables來(lái)管理端口訪問(wèn)規(guī)則,AI的建議為了確保 8081 端口可以從外部訪問(wèn)梭依,應(yīng)該添加一條規(guī)則來(lái)允許 TCP 流量進(jìn)入該端口稍算。你可以使用以下命令來(lái)添加規(guī)則:sudo iptables -I INPUT -p tcp --dport 8081 -j ACCEPT
因?yàn)椴皇煜み@條命令并且之前碰到過(guò)iptables導(dǎo)致docker某個(gè)端口無(wú)法訪問(wèn),重啟一下就能解決役拴,所以我選擇了重啟iptables sudo systemctl restart iptables
,命令報(bào)錯(cuò):沒(méi)有這個(gè)服務(wù)糊探;震驚,明明有這個(gè)進(jìn)程河闰,執(zhí)行sudo iptables -L -n -v
可以列出iptable的所有規(guī)則侧到;然后接著問(wèn)AI,AI給的回復(fù)是:
當(dāng)你遇到 "Unit iptables.service not found." 的錯(cuò)誤時(shí)淤击,這通常意味著你的系統(tǒng)上沒(méi)有使用 iptables.service 這個(gè)服務(wù)單元。這可能是因?yàn)槟愕南到y(tǒng)使用的是 iptables 的替代品故源,比如 nftables污抬,或者是 iptables 的服務(wù)單元名稱在你的系統(tǒng)上有所不同。
在許多現(xiàn)代 Linux 發(fā)行版中绳军,iptables 的服務(wù)單元可能被稱為 iptables.service印机、netfilter-persistent.service 或者 nftables.service,具體取決于你的系統(tǒng)配置和安裝的軟件包门驾。
解決方案
檢查服務(wù)單元名稱
首先射赛,確認(rèn)你的系統(tǒng)上實(shí)際使用的服務(wù)單元名稱。你可以使用systemctl list-unit-files | grep iptables
或者systemctl list-unit-files | grep nftables
來(lái)查找相關(guān)服務(wù)奶是。
然后確定服務(wù)名字是nftables之后執(zhí)行sudo systemctl restart nftables
重啟這個(gè)服務(wù)楣责,在之后我又重啟了我的docker服務(wù)sudo systemctl restart docker
執(zhí)行完之后發(fā)現(xiàn)我從宿主機(jī)阿里云服務(wù)器執(zhí)行curl 命令可以訪問(wèn)到nginx的服務(wù)了;但是我再本地還是無(wú)法訪問(wèn)聂沙,不用說(shuō)肯定是阿里云做了攔截秆麸,接下來(lái)去阿里云服務(wù)器的白名單里邊把這個(gè)端口開放出來(lái)就好了;