博客 / 詳情

返回

1panel的ssl證書路徑排查配置總結

一、問題背景

初始需求:只能通過阿里雲的workbench遠程連接,需求是替換網站SSL證書。其他信息均無。奔着兩眼一抹黑的精神大海落枕一把。本想着找到nginx直接看配置文件,然後替換路徑就ok。但是發現這個用户下有兩個ecs,做了轉發?docker端口映射?只猜對了一半。。。。

二、排查階段與核心步驟

階段1:定位80端口監聽進程——排除宿主機標準Nginx

1.1 發現端口監聽但無法找到Nginx命令

netstat -anp顯示80/443端口被nginx: master process監聽,卻無法通過常規命令找到宿主機Nginx安裝路徑。。

  • 現象:執行netstat -anp|grep 80,顯示0.0.0.0:80 LISTEN 29071/nginx: master,但執行which nginx/whereis nginx均提示“無此命令”,nginx -t報錯“command not found”。
  • 排除法:排除宿主機通過yum/apt安裝的標準Nginx(此類安裝會將nginx命令加入PATH),懷疑是:①源碼編譯的Nginx/OpenResty;②Docker容器內的服務;③面板管理的非標準路徑服務。
  • 核心命令

    # 查看端口監聽進程
    netstat -antp|grep 80  # 或 ss -tulpn|grep 80
    # 排查Nginx命令是否存在
    which nginx
    whereis nginx
    nginx -t  # 驗證命令可用性

階段2:追溯進程本質——發現OpenResty與Docker容器關聯

2.1 查看進程詳情,定位服務類型

  • 操作:執行ps -ef | grep nginx,發現進程實際啓動命令為:

    root 29071 29051 0 2024 ? 00:00:00 nginx: master process /usr/local/openresty/bin/openresty -g daemon off;
  • 結論:監聽80/443的“Nginx”實際是OpenResty(基於Nginx的擴展服務),但/usr/local/openresty/bin/openresty路徑不存在,進一步懷疑是Docker容器內的服務。

2.2 驗證Docker容器,確認服務歸屬

  • 操作:執行docker ps,發現容器1Panel-openresty-2jEd(1Panel前綴表明由面板管理),且執行ps -ef | grep openresty時出現docker exec -it 1Panel-openresty-2jEd /bin/bash(曾進入過該容器)。
  • 結論:OpenResty運行在1Panel-openresty-2jEd容器內,而非宿主機直接安裝。
  • 核心命令

    # 查看進程完整啓動命令
    ps -ef | grep nginx
    ps -ef | grep openresty
    # 查看運行中的Docker容器
    docker ps

階段3:解析容器配置——Host網絡與宿主機掛載點

3.1 找到Docker Compose配置文件,明確網絡與掛載規則

  • 操作:通過find / -name "docker-compose.yml" | grep openresty定位到配置文件路徑/opt/1panel/apps/openresty/openresty/docker-compose.yml,關鍵配置如下:

    services:
      openresty:
        container_name: ${CONTAINER_NAME}
        network_mode: host  # 容器使用宿主機網絡(直接監聽宿主機80/443)
        volumes:
          - ./conf/conf.d:/usr/local/openresty/nginx/conf/conf.d/  # 宿主機配置目錄掛載到容器
          - ./www:/www  # 宿主機網站目錄掛載到容器
  • 核心結論

    1. network_mode: host:容器無需端口映射,直接使用宿主機80/443端口,因此netstat顯示宿主機進程監聽。
    2. volumes掛載:宿主機/opt/1panel/apps/openresty/openresty/conf/conf.d對應容器內Nginx站點配置目錄,./www對應容器內網站/證書目錄(解決“證書路徑在宿主機找不到”問題)。

3.2 定位SSL證書配置與掛載路徑

  • 操作:查看宿主機掛載的配置文件/opt/1panel/apps/openresty/openresty/conf/conf.d/47.***.232.conf,發現證書路徑:

    ssl_certificate /www/sites/47.***.232/ssl/fullchain.pem;
    ssl_certificate_key /www/sites/47.***.232/ssl/privkey.pem;
  • 路徑轉換:因./www掛載到容器/www,宿主機實際證書路徑為/opt/1panel/apps/openresty/openresty/www/sites/47.***.232/ssl/(無需進入容器即可替換證書)。
  • 核心命令

    # 搜索Docker Compose配置文件
    find / -name "docker-compose.yml" | grep openresty 2>/dev/null
    # 查看站點配置文件
    cat /opt/1panel/apps/openresty/openresty/conf/conf.d/47.***.232.conf
    # 確認宿主機掛載的證書目錄
    ls -la /opt/1panel/apps/openresty/openresty/www/sites/47.***.232/ssl/

階段4:定位1Panel面板配置——登錄地址與密碼重置

4.1 確定1Panel進程與監聽端口

  • 如何確認是1Panel?

    1. 目錄特徵:服務器存在/opt/1panel目錄(1Panel默認安裝路徑,包含apps/conf/bin等子目錄,對應面板管理的應用、配置、命令工具)。
    2. 進程特徵:執行ps -ef | grep 1panel,顯示1Panel主進程(如/opt/1panel/bin/1panel)。
    3. 專用命令:執行1pctl user-info(1Panel專屬命令,直接輸出面板信息,非系統或其他面板命令)。
  • 操作

    1. 執行ps -ef | grep 1panel,找到1Panel主進程PID(如1234)。
    2. 執行ss -tulpn | grep 1234,顯示監聽端口(如*:12826)。
    3. 執行1pctl user-info,直接獲取面板地址:http://服務器IP:12826/81f848ba8f,用户名:d67c5a2cea

4.2 重置1Panel密碼

  • 現象1pctl user-info顯示密碼為********(加密隱藏,無法直接查看)。
  • 操作:執行1Panel專用重置命令:

    # 進入1Panel安裝目錄
    cd /opt/1panel
    # 重置密碼(輸出隨機新密碼)
    ./bin/1panel-cli reset-password
  • 後續:用新密碼登錄面板後,在“個人設置”中修改為自定義密碼。
  • 核心命令

    # 查看1Panel進程
    ps -ef | grep 1panel
    # 查看1Panel監聽端口
    ss -tulpn | grep <1Panel進程PID>
    # 查看1Panel面板信息
    1pctl user-info
    # 重置1Panel密碼
    /opt/1panel/bin/1panel-cli reset-password

三、關鍵難點與解決思路

難點 解決思路 排除法應用
1. 有Nginx進程但無nginx命令 從進程啓動命令追溯服務類型(`ps -ef grep nginx`發現是OpenResty),再排查OpenResty部署方式(Docker/源碼) 排除宿主機標準Nginx(which無結果),排除源碼編譯(find / -name openresty發現Docker路徑)
2. OpenResty在容器內但監聽宿主機端口 查看Docker Compose的network_mode配置,確認host模式(容器直接使用宿主機網絡) 排除端口映射模式(docker ps0.0.0.0:80->80/tcp映射),確認host模式後無需找端口映射關係
3. 證書路徑在配置中存在但宿主機找不到 查看Docker Compose的volumes掛載,找到宿主機掛載目錄(./www對應容器/www 排除容器內獨立目錄(無需進入容器,直接操作宿主機掛載目錄即可)
4. 找不到1Panel登錄地址 利用1Panel目錄特徵(/opt/1panel)、進程特徵(`ps -ef grep 1panel)、專用命令(1pctl user-info`) 排除其他面板(無bt/aaPanel等命令,目錄無對應面板特徵)

四、核心定位方法總結

  1. 端口→進程→服務類型:從netstat/ss查端口監聽進程,再用ps -ef查進程啓動命令,確定服務是Nginx/OpenResty。
  2. 進程→部署方式:通過進程路徑(如/usr/local/openresty/bin/openresty)結合find/docker ps,確定是宿主機/容器部署。
  3. 容器→配置解析:找到Docker Compose文件,分析network_mode(網絡)和volumes(掛載),明確宿主機與容器的文件/網絡關聯。
  4. 面板→專屬工具:利用1Panel專用命令(1pctl)和默認安裝目錄(/opt/1panel),快速定位面板信息,避免全局搜索浪費時間。

五、Linux核心命令清單(按用途分類)

1. 端口與進程查詢

命令 用途 示例
netstat -antp 查看所有TCP端口監聽及對應進程 `netstat -antp grep 80`(查80端口進程)
ss -tulpn 查看所有監聽端口及進程(比netstat更高效) `ss -tulpn grep 443`(查443端口進程)
`ps -ef grep <關鍵詞>` 查看包含關鍵詞的進程詳情 `ps -ef grep nginx`(查Nginx相關進程)
lsof -p <PID> 查看進程打開的文件(需安裝lsof `lsof -p 29071 grep .conf`(查進程打開的配置文件)

2. 文件與路徑搜索

命令 用途 示例
find / -name <文件名> 2>/dev/null 全局搜索文件,忽略權限錯誤 `find / -name "docker-compose.yml" grep openresty`
grep -r -i <關鍵詞> <目錄> 遞歸搜索目錄下包含關鍵詞的文件 grep -r -i "d***tong" /opt/1panel/apps/openresty
ls -la 查看目錄下所有文件(含隱藏文件如.env ls -la /opt/1panel/apps/openresty/openresty(查.env文件)
cat <文件路徑> 查看文件內容 cat /opt/1panel/conf/1panel.conf(查1Panel配置)

3. Docker操作

命令 用途 示例
docker ps 查看運行中的容器 `docker ps grep openresty`(查OpenResty容器)
docker exec -it <容器名> /bin/bash 進入容器交互終端 docker exec -it 1Panel-openresty-2jEd /bin/bash
docker restart <容器名> 重啓容器 docker restart 1Panel-openresty-2jEd(重啓OpenResty)
cat <docker-compose.yml路徑> 查看容器配置(網絡、掛載) cat /opt/1panel/apps/openresty/openresty/docker-compose.yml

4. 1Panel專用命令

命令 用途 示例
1pctl user-info 查看1Panel面板地址、用户名 1pctl user-info
/opt/1panel/bin/1panel-cli reset-password 重置1Panel密碼 /opt/1panel/bin/1panel-cli reset-password

六、最終操作流程(SSL證書替換)

  1. 替換證書:將新證書fullchain.pem/privkey.pem上傳到宿主機路徑/opt/1panel/apps/openresty/openresty/www/sites/47.***.232/ssl/
  2. 重啓服務:執行docker restart 1Panel-openresty-2jEd(或在1Panel面板“應用管理”重啓OpenResty)。
  3. 驗證:瀏覽器訪問https://wxapp.d***tong.cn,查看證書是否更新;或執行openssl s_client -connect 47.***.232:443 -servername wxapp.d***tong.cn驗證證書信息。

image.png

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.