該文章分享超過 1 年,隨時都會消失或變叉燒包,請聯繫管理員處理。
前言
因為我已經利用 LAMP 安裝了 WordPress、NextCloud,並且利用 Apache 來做反向代理給 memos 做 SSL 證書,但是這樣取得 SSL 實在不是很人性化,雖然說幾個指令打一下就可以,但是當我用過 Nginx Proxy Manager 之後就回不去了,而且網路上一直說用 Nginx 作反向代理可速度是 Apache 的 2.5 倍之類的,害我實在心動……,所以乾脆來手動處理看看 Apache 前掛個 Nginx Proxy Manager 是否真的快速。
更改步驟
刪除 certbot 的任務及檔案 (可以略過)
因為之前利用 Apache 的 certbot 取得 SSL 證書,現在要利用 Nginx Proxy Manager 來取得,所以就先移除之前的設定及證書
#指令
certbot revoke --cert-name 網址名稱
#範例
certbot revoke --cert-name abc.com
此命令將吊銷證書並刪除與其鏈接的 Apache 組態。
#指令
certbot delete --cert-name 網址名稱
#範例
certbot delete --cert-name abc.com
需要注意的是,吊銷證書會使其失效,但不會從服務器中刪除證書檔案。執行 certbot delete 命令從服務器中刪除證書檔案。
修改 Apache 埠口
開啟終端機,移動到/etc/apache2,打開ports.conf編輯
cd /etc/apache2
sudo nano /etc/apache2/ports.conf
#埠口可以修正為80以外的任何埠口,我的習慣是480
Listen 480
<IfModule ssl_module>
# Listen 443
</IfModule>
<IfModule mod_gnutls.c>
# Listen 443
</IfModule>
修改將 Listen 80 更改為 Listen 480 ,保存並關閉文件。480可以更改為任意數字,但不要用到常用的埠口即可。然後把listen 443註解掉。
接著修改 Apache 內的 NextCloud 及 WordPress 的設定檔,我的設定檔名稱為nextcloud.conf及wordpress.conf
sudo nano /etc/apache2/sites-available/nextcloud.conf
sudo nano /etc/apache2/sites-available/wordpress.conf
sudo nano /etc/apache2/sites-available/000-default.conf
將內容監聽的埠口80修改為480,然後存檔。
<VirtualHost *:80>
↓↓↓↓↓↓↓↓↓↓↓
<VirtualHost *:480>
並且將所有設定檔內的有使用到 https 代理註解掉
#RewriteEngine on
#RewriteCond %{SERVER_NAME} =網址
#RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
我們可以禁用默認的 Apache 站點,因為 Nginx 將處理這個問題。這將避免 Apache 和 Nginx 之間出現問題:
sudo a2dissite 000-default
因為我也有用 Apache 反代理來執行 memos,所以我要先把 memos 的網站禁止
sudo a2dissite memos
並且修改/etc/apache2/apache2.conf,將Header unset Upgrade添加進去到檔案的最底部,如果不增加這個,iOS 的系統將無法連線至 NextCloud,搞了一天才終於發現解決方法
sudo nano /etc/apache2/apache2.conf
#將該指令增加至最底下存檔即可
Header unset Upgrade
重新啟動 Apache
sudo service apache2 restart
安裝 Nginx Proxy Manager
使用 Docker-Compose 來安裝很方便,打開終端機,移動到一個適當的位置創建一個 Docker-Compose.yml,將下列指令複製貼上即可。
我的習慣是將 Docker-Compose.yml 建立在大硬碟上,因為我的系統碟只有 256G 有點小,避免硬碟爆掉導致問題出現。
cd /mnt/cloud1
mkdir npm
cd npm
sudo nano /mnt/cloud1/npm/docker-compose.yml
複製貼上即可
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
開啟 Nginx Proxy Manager 的控制台頁面,通常是 IP:81,我的範例是192.168.6.7:81。進入登入畫面需要輸入預設的帳號密碼才能進去內部設定,預設帳號密碼為
Email:admin@example.com
Password:changeme
詳細設定方式參考在 iStoreOS 上安裝 memos 並利用 Nginx Proxy Manager 反向代理及簽證
設定相同埠口不同網址,就像下列圖片這樣即可。

NextCloud 的進階設定
NextCloud 的反代理設定除了填寫 Nginx Proxy Manager 內建的表格外,還要額外增加下列
目前是只有使用下列指令到 Nginx Proxy Manager,其他的都沒輸入
記錄時間:2023 年 09 月 23 日
location = /.well-known/carddav {return 301 $scheme://$host:$server_port/remote.php/dav;}
location = /.well-known/caldav {return 301 $scheme://$host:$server_port/remote.php/dav;}
NextCloud 內容設定
以及編輯 NextCloud 內的config.php,我的位置在/var/www/nextcloud/config/config.php:
sudo nano /var/www/nextcloud/config/config.php
'trusted_domains' =>
array (
0 => '192.168.6.7:480', #內部ip
1 => '網址',
),
'overwritehost' => '網址',
'overwriteprotocol' => 'https',
'overwritewebroot' => '/',
'overwrite.cli.url' => 'https://網址/',
'htaccess.RewriteBase' => '/',
'trusted_proxies' => ['Nginx Proxy Manager的虛擬IP'],
#即內部ip,我使用的是192.168.6.7
WordPress 的設定
WordPress 的反代理設定除了填寫 Nginx Proxy Manager 內建的表格外,還要額外增加下列
-->
修正 apache 內 WordPress 的內容
sudo nano /etc/apache2/sites-available/wordpress.conf
修改如下:
<VirtualHost *:480>
ServerName 網址
ServerAlias 網址
DocumentRoot /var/www/wordpress #目錄位置
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
#This enables .htaccess file, which is needed for WordPress Permalink to work.
<Directory "/var/www/wordpress"> #目錄位置
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/wordpress.error.log
CustomLog ${APACHE_LOG_DIR}/wordpress.access.log combined
#註解掉
#RewriteEngine on
#RewriteCond %{SERVER_NAME} =網址
#RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
存檔後重新啟動 apache
sudo service apache2 restart
接著要在 WordPress 的程式設定裡面修改,不然會無限循環重新指向,及出現ERR_TOO_MANY_REDIRECTS的錯誤
sudo nano ~/yourdomainname.com/public/wp-config.php
#範例
sudo nano /var/www/wordpress/wp-config.php
然後將下列指令輸入在<?php下
define('FORCE_SSL_ADMIN', true);
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
$_SERVER['HTTPS']='on';