騰訊雲伺服器Nginx反向代理的Photoprism(包括https設定)

一个AI的修养發表於2024-03-15

2024年3月15日,因為不想忘記前面關於Nginx反向代理Photoprism的內容。這裡記錄下,如果能幫助到點選到這篇部落格的人就更好了。
主要分為三個部分,第一個部分是部署Photoprism,第二個部分是Nginx反向代理,第三個部分是https設定

前置條件(沒有的話,就不要往下看了,或者先稍微瞭解下再往下看)

  1. 瞭解linux系統命令,知道是什麼意思
  2. 瞭解vim或者其他編輯器(如果你沒有圖形介面的話)
  3. 瞭解ip,埠等計算機網路相關內容
  4. 一個解析好的域名(反向代理需要用)

部署Photoprism

這一塊官方有很詳細的教程,這裡我就簡單把命令貼一下。

sudo apt install docker  // 安裝docker
wget https://dl.photoprism.app/docker/docker-compose.yml  // 下載photoprism映象配置檔案
docker compose up -d  // 啟動服務

輸入上面命令其實就結束了,如果你有圖形介面的話,可以 瀏覽器輸入http://localhost:2342/應該就能看到介面了。如果你只想在區域網或者自己電腦上用那到這裡就可以結束了

Nginx反向代理

Nginx如果你想研究的話不建議百度之類的瞎看,去官網說明之類的地方看一看

Nginx服務啟動

sudo apt-get install -y nginx // 安裝Nginx
sudo systemctl enable --now nginx // 開機自啟動Nginx

反向代理(http)

反向代理需要一個解析好了的域名,解析域名這塊騰訊雲伺服器有很多教程,解析完後再往下走。
新建一個Nginx配置檔案,配置檔案的名稱自己喜歡就行, 這裡是“photoprism.conf",但是字尾要一樣

vim /etc/nginx/conf.d/photoprism.conf

把以下內容複製進去

server {
    listen 80;
    server_name <你的域名>;  # abc.com之類的
    client_max_body_size 0;

    location / {
        proxy_pass http://127.0.0.1:2342;  # 你代理的頁面,Photoprism預設的就是這個。不需要改動
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

然後重新啟動兩個服務

sudo systemctl restart nginx
docker-compose up -d

現在你就可以在任何電腦輸入你的域名,訪問你的照片庫,當然目前還是個http裸奔,不介意的話其實也沒事。駭客什麼的應該也看不上我存的內容

反向代理(https)

這個是重頭戲了!
這個是重頭戲了!
這個是重頭戲了!
先把需要的東西準備好,ssl證書。如果你也是用的騰訊雲的話,可以按照下面的步驟操作

  1. 在控制檯的搜尋欄直接搜尋"ssl證書"
  2. 我的證書->申請免費證書
  3. 成功之後,下載Nginx版本就行

把這個證書解壓後檔案全部傳到伺服器上,推薦Winscp工具,怎麼使用靠你自己去調查了。
接下來就是Nginx配置檔案設定

sudo vim /etc/nginx/conf.d/photoprism.conf
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name <你的域名>;
    client_max_body_size 500M;

    # With SSL via Let's Encrypt
    # 對應的ssl證書, 壓縮包解壓出來有四個檔案,包含下面兩個字尾的就行
    # 記得路徑改成你的證書所在路徑,一般會放到/etc/nginx下面。其他路徑我沒進行嘗試,應該也沒問題的
    ssl_certificate /etc/nginx/xxxxxx.crt; 
    ssl_certificate_key  /etc/nginx/xxxxxx.key; 

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;

        proxy_pass http://127.0.0.1:2342;

        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        client_max_body_size 500M;
 }
}

如果你重啟Nginx的時候遇到了下面的問題

Job for nginx.service failed because the control process exited with error code.

那就用下面的命令檢視日誌

sudo systemctl status nginx

如果日誌顯示下面語句

Mar 15 13:41:08 VM-4-6-ubuntu systemd[1]: Starting A high performance web server and a reverse proxy server...
Mar 15 13:41:08 VM-4-6-ubuntu nginx[584795]: nginx: [emerg] no "ssl_certificate" is defined for the "listen ... ssl" directive in /etc/nginx/sites-enabled/default:21
Mar 15 13:41:08 VM-4-6-ubuntu nginx[584795]: nginx: configuration file /etc/nginx/nginx.conf test failed

進入錯誤提到的地方,也就是這個/etc/nginx/sites-enabled/default

sudo vim /etc/nginx/sites-enabled/default

變更成下面的樣子,就是改成443埠,並且新增ssl認證

server {
        #listen 80 default_server;
        #listen [::]:80 default_server;

        # SSL configuration
        #
        # 最開始預設的是80埠,為了ssl,我們開啟443埠。把80的註釋掉了了
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;

       # 這裡就是前面提到的ss證書的第二個位置
        ssl_certificate /etc/nginx/liulustore.com_bundle.crt; 
        ssl_certificate_key  /etc/nginx/liulustore.com.key; 
       # 這之後的內容都不需要變更

完成之後記得重啟兩個服務

sudo systemctl restart nginx
docker-compose up -d

到這裡就全部結束了

相關文章