在今年年初, 我們發布過一篇文章《在 CentOS 8 下配置 Nginx + PHP 7 + MySQL 8 + phpMyAdmin + vsFTPd》. 在當時, PHP 還沒有發布 PHP 8, 現在 PHP 8 已經發布了, 所以我們嘗試進行配置
不同服務商提供的伺服器可能有細微的不同, 因此我們首先執行以下指令, 以確保我們安裝了 Vim、dnf (DaNdiFied Yum) 、unzip 以及 OpenSSL :
yum install -y vim dnf cockpit unzip openssl
接下來, 我們將全面使用 dnf
指令替換 yum
指令. 為了避免出現錯誤, 我建議大家首先升級一下伺服器中所有的套件 :
dnf -y update
1. Nginx
進入
http://nginx.org/packages/centos/8/x86_64/RPMS/
查看最新的 RPM 地址. 截止到發文為止, 最新的地址為
http://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.18.0-2.el8.ngx.x86_64.rpm
因此, 我們執行指令
rpm -Uvh http://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.18.0-2.el8.ngx.x86_64.rpm

和 CentOS 7 不同的是, CentOS 8 在添加 RPM 包的時候自動安裝了 Nginx, 那麼我們只需要讓其啟動即可
systemctl enable --now nginx
接下來介紹一些 Nginx 的模組 (所有的地址都可以在 http://nginx.org/packages/centos/8/x86_64/RPMS/ 中找到最新版本) :
- Image Filter : 它是用於圖片處理的. 安裝之前需要執行
dnf install -y gd
, 以安裝依賴的模組. 最後輸入指令rpm -Uvh http://nginx.org/packages/centos/8/x86_64/RPMS/nginx-debuginfo-1.18.0-2.el8.ngx.x86_64.rpm
即可 - NJS : 這是 Nginx 中的 JavaScript 指令碼語言. 輸入指令
rpm -Uvh http://nginx.org/packages/centos/8/x86_64/RPMS/nginx-module-njs-1.18.0.0.4.4-2.el8.ngx.x86_64.rpm
即可 - Perl : 這是讓 Nginx 支援使用 FastCGI 處理 Perl 程式設計語言的模組. 輸入指令
rpm -Uvh http://nginx.org/packages/centos/8/x86_64/RPMS/nginx-module-perl-1.18.0-2.el8.ngx.x86_64.rpm
即可 - XSLT : 這個模組可以讓 Nginx 支援可延伸樣式表轉換語言, 以便把 XML 轉換為其它檔案. 安裝之前需要執行
dnf install -y libxslt
. 然後輸入指令rpm -Uvh http://nginx.org/packages/centos/8/x86_64/RPMS/nginx-module-xslt-1.18.0-2.el8.ngx.x86_64.rpm
即可 - ...
Nginx 的模組不止上面提到的這些, 大家可以自行探索. 這些模組只是可選的, 對於一般的人來說, 不安裝沒有任何影響, 除非你有特殊需求. 值得注意的是, 上面提到的一些模組, 在引入 RPM 包的時候已經安裝
我的服務商提供的伺服器帶有一個服務商自建的安全模組, 因此 FireWall 和 SELinux 在我的伺服器上預設是關閉的狀態. 如果你的服務商也自建了安全模組 (建議自行資訊閣下的服務商), 那麼我同樣建議你關閉 FireWall 和 SELinux. 否則, 就需要配置 FireWall, 這裡我只提供 FireWall 的配置方法和關閉 SELinux 的方法. 對於 FireWall, 我們只需要將對應連接埠添加到公共區域即可 :
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
每一條指令之後, 都會有 success
回傳
如果你只是想臨時關閉, 那麼直接執行指令
setenforce 0
就可以了. 但是如果你想要永久關閉, 就需要修改檔案
提前說明 : 按下 "/
" 再輸入字元就是 vim 的搜尋, 按下 i
進入編輯模式, 使用鍵盤上的上下左右按鍵進行移動, 按下 esc
按鍵退出編輯模式, 按下 ":
" + "w
" + "回車
" 保存, 按下 ":
" + "q
" + "回車
" 退出. "wq
" 組合表示保存的同時退出, 最後加一個 "!
" 表示強制性的
vim /etc/selinux/config
找到 SELINUX=enforcing
修改為
SELINUX=disabled
然後重新啟動作業系統
reboot
對於服務商自建的安全模組, 需要開放 80
與 443
連接埠, 模式為 TCP. 現在由於 IPv6 的普及, 建議同時為 IPv4 和 IPv6 開放這兩個連接埠. 如果你不知道如何配置服務商自建的安全模組, 請諮詢你的服務商或者尋找服務商提供的教學
和 CentOS 7 不同的是, CentOS 8 在添加 RPM 包的時候自動安裝了 Nginx, 那麼我們只需要讓其啟動即可
systemctl enable --now nginx
設定完成之後, 直接訪問你的 IP, 就可以看到如下的頁面

2. MySQL
進入
https://dev.mysql.com/downloads/repo/yum/
找到最新的 RPM 包地址, 一般 CentOS 位於第一個
截止發文為止的最新地址為
https://repo.mysql.com//mysql80-community-release-el8-1.noarch.rpm
執行指令
rpm -Uvh https://repo.mysql.com//mysql80-community-release-el8-1.noarch.rpm
和 Nginx 不同的是, MySQL 並不會直接安裝, 需要手動安裝 :
dnf install -y @mysql
其中的 "@
" 表示 MySQL 的套件包, 這個指令要比之前 CentOS 7 使用的指令簡單得多

上面這個圖是之前那個文章中發的, 結果也都差不多
完成之後, 首先需要啟動 MySQL. 和 CentOS 7 安裝時不同的是, 在 CentOS 8 中, MySQL 安裝之後並不會直接設定自動執行, 而 MySQL 一般是需要啟動後自動執行的, 所以執行指令
systemctl enable --now mysqld
然後進行配置, 配置的方法也和 CentOS 7 不同, 需要執行指令
mysql_secure_installation
在這之前, 我要提醒大家, 如果你對 MySQL 不熟悉, 那麼請按照本博客給出的方法設定 MySQL. 當然, 這個配置過程你可以完全個性化, 如果你不想確定某個操作, 不要輸入 y
或者 Y
即可, 其它任意的按鍵都可以幫助你避開某個操作

這是詢問是否啟用驗證密碼套件, 一般輸入 y
確認

這是詢問 MySQL 的帳戶密碼強度. MySQL 要求任意帳戶的密碼都必須大於 8 個字元. 0 代表低強度 (LOW) 密碼, 任意大於 8 個字元的密碼均可; 1 代表中等強度 (MEDIUM) 的密碼, 除了 LOW 的要求之外, 還要求數字 + 大小寫 + 特殊字元; 2 代表高強度 (STRONG) 的密碼, 除了 MEDIUM 的要求之外, 還要求字典檔案. 一般 MEDIUM 強度即可, 不過為了安全起見, 我們使用高強度, 此處輸入 2 (如果你只想用中等強度, 那麼輸入 1, 不推薦低強度)

這是確認你剛才所輸入的密碼, 密碼的最大長度為 100 個字元

MySQL 會有一個不具名帳戶, 一般情況下我們輸入 y
移除它

MySQL 的預設帳戶 root 擁有全域的權限, 因此一般輸入 y
禁止它遠端登陸

MySQL 預設會創建一個名為 test 的資料庫, 一般輸入 y
移除它

這是詢問是否重新載入資料表權限, 一般輸入 y
來重新載入
到此, MySQL 安裝完成. 之前, 我們需要為 MySQL 建立一個相容的 root 帳戶, 但是目前很多程式已經支援了 MySQL 8 的驗證方式, 所以我們幾乎不再需要建立這樣的帳戶. 如果大家的程式還沒有與 MySQL 8 相容, 那麼請參考本博客之前的教學《對於 MySQL 8 的一些相容性提示》
3. PHP
這是本篇文章的重頭戲
在安裝 PHP 的 RPM 包之前, 必須安裝其所需要的套件 epel-release 和 ncurses-devel
dnf install -y epel-release ncurses-devel
然後引入 RPM 包 :
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-8.rpm
如果你在引入包的過程中遇到了一些莫名其妙的錯誤, 比如

以及其它一些錯誤. 我遇到過另外一種錯誤, 不過當時連線被斷開, 所以沒辦法擷取圖片
刷新 RPM 包的緩存 (如果你沒有遇到, 那麼接下來這三步可以省略) :
dnf upgrade --refresh rpm glibc
然後假裝升級 dnf 套件 :
rm /var/lib/rpm/.rpm.lock
dnf upgrade dnf

通過指令 dnf module list php
, 我們可以看到一些關於 PHP 的套件 :

作業系統本身自帶了 PHP 7.2、PHP 7.3 和 PHP 7.4, 但是我們要安裝的是 PHP 8.0
在安裝 PHP 8.0 的全部套件之前, 我們需要安裝一些依賴的套件 (如果你不是新人, 可以直接跳過這部分, 根據我下面給出的所有套件, 安裝你需要的套件即可. 如果你是新人, 建議按照本文給處的步驟走)
為了安裝完全的套件, 我們首先引入一個 RPM 包 :
rpm -Uvh http://ftp.altlinux.org/pub/distributions/ALTLinux/p9/branch/x86_64/RPMS.classic/libsz2-2.1-alt4.x86_64.rpm
然後執行指令
dnf install -y php80 php80-build php80-libzip php80-php php80-php-ast php80-php-bcmath php80-php-brotli php80-php-cli php80-php-common php80-php-componere php80-php-dba php80-php-dbg php80-php-devel php80-php-embedded php80-php-enchant php80-php-ffi php80-php-fpm php80-php-gd php80-php-geos php80-php-gmp php80-php-imap php80-php-intl php80-php-json php80-php-ldap php80-php-litespeed php80-php-lz4 php80-php-maxminddb php80-php-mbstring php80-php-mysqlnd php80-php-oci8 php80-php-odbc php80-php-opcache php80-php-pdlib php80-php-pdo php80-php-pdo-dblib php80-php-pdo-firebird php80-php-pear.noarch php80-php-pecl-ahocorasick php80-php-pecl-amqp php80-php-pecl-apcu php80-php-pecl-apcu-devel php80-php-pecl-apfd php80-php-pecl-base58 php80-php-pecl-bitset php80-php-pecl-couchbase3 php80-php-pecl-csv php80-php-pecl-datadog-trace php80-php-pecl-dbase php80-php-pecl-dio php80-php-pecl-ds php80-php-pecl-env php80-php-pecl-event php80-php-pecl-fann php80-php-pecl-geoip php80-php-pecl-geospatial php80-php-pecl-grpc php80-php-pecl-handlebars php80-php-pecl-hdr-histogram php80-php-pecl-http php80-php-pecl-http-devel php80-php-pecl-http-message php80-php-pecl-igbinary php80-php-pecl-igbinary-devel php80-php-pecl-imagick php80-php-pecl-imagick-devel php80-php-pecl-inotify php80-php-pecl-ip2location php80-php-pecl-ip2proxy php80-php-pecl-json-post php80-php-pecl-krb5 php80-php-pecl-krb5-devel php80-php-pecl-leveldb php80-php-pecl-lzf php80-php-pecl-mailparse php80-php-pecl-mcrypt php80-php-pecl-memcache php80-php-pecl-memcached php80-php-pecl-memprof php80-php-pecl-mongodb php80-php-pecl-msgpack php80-php-pecl-msgpack-devel php80-php-pecl-mustache php80-php-pecl-mysqlnd-azure php80-php-pecl-oauth php80-php-pecl-pcov php80-php-pecl-pq php80-php-pecl-protobuf php80-php-pecl-psr php80-php-pecl-raphf php80-php-pecl-rar php80-php-pecl-rdkafka4 php80-php-pecl-redis5 php80-php-pecl-rpminfo php80-php-pecl-rrd php80-php-pecl-runkit7 php80-php-pecl-scrypt php80-php-pecl-selinux php80-php-pecl-solr2 php80-php-pecl-ssdeep php80-php-pecl-ssh2 php80-php-pecl-swoole4 php80-php-pecl-sync php80-php-pecl-translit php80-php-pecl-uuid php80-php-pecl-varnish php80-php-pecl-vips php80-php-pecl-xattr php80-php-pecl-xdebug3 php80-php-pecl-xdiff php80-php-pecl-xhprof php80-php-pecl-xlswriter php80-php-pecl-xmldiff php80-php-pecl-xmlrpc php80-php-pecl-yac php80-php-pecl-yaconf php80-php-pecl-yaml php80-php-pecl-yaz php80-php-pecl-zip php80-php-pecl-zmq php80-php-pgsql php80-php-phpiredis php80-php-process php80-php-pspell php80-php-realpath-turbo php80-php-smbclient php80-php-snappy php80-php-snmp php80-php-soap php80-php-sodium php80-php-sqlsrv php80-php-tidy php80-php-xml php80-php-xmlrpc php80-php-zephir-parser php80-php-zstd php80-unit-php php80-xhprof.noarch --skip-broken
上面指令會忽略三個套件 : php80-php-pecl-krb5、php80-php-pecl-krb5-devel 和 php80-php-sqlsrv. 其中, 前面兩個套件和我們的作業系統不相容, 最後一個套件要求安裝 msodbcsq 套件, 這是關於 Microsoft 的 MSSQL 的套件, 如果沒有安裝套件 msodbcsq, 那麼就無法安裝 php80-php-sqlsrv. 因此, 上述三個套件我們直接使用 --skip-broken
跳過. 如果你的作業系統上安裝了 msodbcsq, 那麼套件 php80-php-sqlsrv 不會被跳過
接下來我們需要配置 PHP
vim /etc/opt/remi/php80/php-fpm.d/www.conf
找到 user = apache
修改為
user = nginx
找到 group = apache
修改為
group = nginx
對於 PHP 有了解的人看到 listen = /var/opt/remi/php80/run/php-fpm/www.sock
這行可能有些奇怪, 因為原來我們一直是使用連接埠 9000
, 即 127.0.0.1:9000
, 現在我們改用 unix socket 的方式. 這個方式對於小的網站比較友好, 有更好的速度. 大型網站仍然建議使用連接埠的形式
另外, 我們還要把 /var/opt/remi/php80/run/php-fpm/www.sock
授權給 Nginx 才行 :
chown nginx:nginx /var/opt/remi/php80/run/php-fpm/www.sock
找到 ;listen.owner = nobody
, 去掉前面的分號, 然後改為
listen.owner = nginx
找到 ;listen.group = nobody
, 去掉前面的分號, 然後改為
listen.group = nginx
找到 ;listen.mode = 0660
, 去掉前面的分號
找到 listen.acl_users = apache
, 修改為
listen.acl_users = nginx
找到 ;listen.acl_groups =
, 去掉前面的分號, 然後在後面添加 nginx
listen.acl_groups = nginx
找到
;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp
此時, 我們已經完成了 PHP-FPM 的配置, 接下來配置 PHP
vim /etc/opt/remi/php80/php.ini
搜尋 mysqli.default_socket
, 在後面添加 /var/lib/mysql/mysql.sock
mysqli.default_socket = /var/lib/mysql/mysql.sock
搜尋 date.timezone
, 去掉前面的分號, 在後面添加 Asia/Hong_Kong
或者改為你自己的時區. 你可以在 https://www.php.net/manual/en/timezones.php 上找到適合你自己的時區
此篇文章中, 我們不對其它設定進行重新修改, 大家請自行按照自己的需求修改. 此處給出一些可能需要修改的選項, 方便大家搜尋 : max_execution_time
, post_max_size
, upload_max_filesize
接下來將一些檔案夾的權限還給 Nginx
chown -R nginx:nginx /var/opt/remi/php80/lib/php/session
接著啟動 PHP-FPM
systemctl enable --now php80-php-fpm
最後, 我們測試一下 PHP 是否被正確安裝
mkdir /www && cd /www
vim info.php
按 i
進入編輯模式, 輸入 (不要忘了分號)
<?php phpinfo();
接著配置 Nginx 展示這個頁面, 此處我直接將網域名稱繫結到這個頁面上. 之後我將不再單獨講解這一部分
cd /etc/nginx/conf.d
vim test.jonny.vip.conf
上面具體的名稱可以改為自己的網域名稱, 比如你的網域為 abc.com
, 那就可以改為 abc.com.conf
, 最後的 .conf
不能捨去. 按 i
進入編輯模式, 修改下面的配置檔案之後複製進去即可
首先給出沒有開啟 SSL 的配置, 新手請使用這個配置, 不要給自己麻煩, SSL 的配置可以之後慢慢再去學習添加
server {
listen 80; #這是你的網頁使用的連接埠, 預設是 80 無需更改
server_name test.jonny.vip; #你的網域名稱, 此處一定要更改
root /www; #你的網頁檔案
access_log /var/log/nginx/test.access.log main;
error_log /var/log/nginx/test.error.log error;
location / {
index index.php index.html;
}
location ~ \.php$ {
fastcgi_pass unix:/var/opt/remi/php80/run/php-fpm/www.sock; #FastCGI 模式, 如果按照本篇文章的配置, 那麼無需更改, 否則需要更改檔案夾或者更改為連接埠模式
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_send_timeout 36000s;
fastcgi_read_timeout 36000s;
fastcgi_buffer_size 1024k;
fastcgi_buffers 8 1024k;
fastcgi_busy_buffers_size 2048k;
fastcgi_temp_file_write_size 2048k;
fastcgi_intercept_errors on;
fastcgi_connect_timeout 36000s;
}
}
接下來給出 SSL 的配置
server {
listen 80; #這是你的網頁使用的連接埠, 預設是 80 無需更改
server_name test.jonny.vip; #你的網域名稱, 此處一定要更改
rewrite ^(.*) https://$host$1 permanent;
}
server {
listen 443 ssl http2;
server_name test.jonny.vip; #你的網域名稱, 此處一定要更改
root /www; #你的網頁檔案
access_log /var/log/nginx/test.access.log main;
error_log /var/log/nginx/test.error.log error;
ssl_certificate /var/crt/test.jonny.vip.crt; #SSL 證書存放位置, 此處一定要更改
ssl_certificate_key /var/crt/test.jonny.vip.key; #SSL 證書存放位置, 此處一定要更改
ssl_session_timeout 5m;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag all;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header Referrer-Policy no-referrer;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
client_max_body_size 0;
proxy_connect_timeout 36000s;
proxy_read_timeout 36000s;
proxy_request_buffering off;
send_timeout 600;
location / {
index index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_pass unix:/var/opt/remi/php80/run/php-fpm/www.sock; #FastCGI 模式, 如果按照本篇文章的配置, 那麼無需更改, 否則需要更改檔案夾或者更改為連接埠模式
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_send_timeout 36000s;
fastcgi_read_timeout 36000s;
fastcgi_buffer_size 1024k;
fastcgi_buffers 8 1024k;
fastcgi_busy_buffers_size 2048k;
fastcgi_temp_file_write_size 2048k;
fastcgi_intercept_errors on;
fastcgi_connect_timeout 36000s;
}
}
具體開啟 HTTPS 的學習請看這篇文章《Nginx 下实现 HTTPS》
使用 nginx -t
指令測試配置檔案是否有錯誤, 如果出現以下情形

則說明配置檔案沒有問題, 接下來重新載入 Nginx
systemctl reload nginx
最後進入瀏覽器訪問 http://你的網域名稱/info.php
, 如果看到如下頁面, 就說明配置成功

4. phpMyAdmin
首先進入我們剛剛建立的檔案夾 /www
cd /www
然後進入網頁
查找最新版本的 phpMyAdmin, 截止發文為止最新的下載地址是
https://files.phpmyadmin.net/phpMyAdmin/5.0.4/phpMyAdmin-5.0.4-all-languages.zip
執行指令
wget https://files.phpmyadmin.net/phpMyAdmin/5.0.4/phpMyAdmin-5.0.4-all-languages.zip
下載完成之後解除封存
unzip phpMyAdmin-5.0.4-all-languages.zip
重新命名
mv phpMyAdmin-5.0.4-all-languages phpMyAdmin
進入檔案夾
cd phpMyAdmin
建立上載和存儲的檔案夾
mkdir save
mkdir upload
建立配置檔案
cp config.sample.inc.php config.inc.php
將檔案夾的權限授權給 nginx 帳戶
chown -R nginx:nginx /www/phpMyAdmin
然後配置 phpMyAdmin
vim config.inc.php
按 i
進入編輯模式, 找到 $cfg['blowfish_secret']
, 在後面的單引號中添加一個至少長達 32 字元的字串, 這個字串需要隨機, 你可以使用網上的字元亂數產生來產生一個幾乎不會被猜中的字串, 比如我的是

不要與我的相同!
接著找到 $cfg['UploadDir']
在單引號中添加 upload
, 找到 $cfg['SaveDir']
在單引號中添加 save

phpMyAdmin 就配置完成了,由於我們直接配置在 /www
檔案夾下, 所以在剛才的網域名稱後面加上 /phpMyAdmin
就可以訪問 phpMyAdmin 了

對於老手來說, 可能會對 phpMyAdmin 配置 SSL 以及獨立的網域名稱, 這一步新手可以自己嘗試, 所有的步驟在上面已經給出來了, 依樣畫葫蘆就可以了
使用者名稱是 root
, 密碼是你剛才配置的 MySQL 密碼. 登陸之後就有以下的頁面

我們看到最後有一個警告, 我們點擊 "了解原因
"

然後點擊 "建立
" 即可

如果出現以下錯誤

解決的方法很簡單, 建立一個 tmp
的檔案夾然後把權限給 Nginx 即可
cd /www/phpMyAdmin
mkdir tmp
chown -R nginx:nginx tmp
刷新之後就看不到這個錯誤了
phpMyAdmin 到此就配置完成了
5. vsFTPd
首先安裝 vsFTPd
dnf install -y vsftpd
建立一個 FTP 用戶
useradd FTP
給 FTP 用戶添加一個密碼, 這個用戶名你可以用你自己喜歡的
passwd FTP
接下來輸入兩次密碼即可

如果你希望這個用戶只能登陸 FTP, 那麼需要禁止其通過終端機的方式登陸, 執行以下指令
usermod -s /sbin/nologin FTP
vim /etc/shells
移動到最後添加一行
/sbin/nologin
讓 vsFTPd 自動執行並且啟用它
systemctl enable --now vsftpd
如果你開啟了 FireWall, 那麼需要執行以下指令
firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
如果你的伺服器使用的是自建的安全模組, 那麼需要添加連接埠 21
讓外部可以訪問, 模式為 TCP
接著, 我們使用 FileZilla 進行連線


如果無法連結, 一般是模式問題, 切換到傳輸設定選擇一個進行測試就行了

如果一個不行就選擇另外一個
接著我們為其開啟 SSL 連線
執行指令 (老手可以個性化指令)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.key -out /etc/vsftpd/vsftpd.pem

首先輸入國家的縮寫 (兩個字元)

輸入省份或著洲的名稱

輸入城市的名稱

輸入公司的名稱

輸入組織的名稱

填寫網域名稱

填寫你的 E-Mail 地址. 值得注意的是, 這份證書僅有 365 天的有效期, 365 天之後要刪除舊的證書, 然後重新執行上述步驟
全部輸入完畢之後, 編輯配置檔案
vim /etc/vsftpd/vsftpd.conf
移到最後添加
#SSL ssl_enable=YES allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO rsa_cert_file=/etc/vsftpd/vsftpd.pem #證書 .pem 檔案地址, 老手可以根據自己的需要修改 rsa_private_key_file=/etc/vsftpd/vsftpd.key #證書 .key 檔案地址, 老手可以根據自己的需要修改 pasv_min_port=59000 #連接埠起始, 這個可以根據你自己的需要修改 pasv_max_port=59010 #連接埠結束, 這個可以根據你自己的需要修改
除此之外, 還要關閉連接埠的 FireWall 保護 (自建安全模組的伺服器要開啟 59000-59010
連接埠, 模式為 TCP)
firewall-cmd --permanent --zone=public --add-port=59000-59010/tcp
firewall-cmd --reload
因為剛才已經啟動了 vsFTPd, 而我們修改了配置, 因此要重新執行它
systemctl restart vsftpd
FileZilla 有兩種方式可以進行 SSL 連線


這是第一種, 比較推薦使用這一種


這是第二種. 中間如果遇到要求確認證書, 那麼直接點擊確認即可
大家會發現現在連線進入 FTP 可以隨意訪問任意檔案夾, 如果要把 FTP 帳戶限定在某一個檔案夾, 可以編輯 chroot_list
檔案
vim /etc/vsftpd/chroot_list
按 i
進入編輯模式, 然後添加對應的帳戶名稱就可以了
接著要修改配置文件
vim /etc/vsftpd/vsftpd.conf
找到 chroot_list_enable=NO
修改為
chroot_list_enable=YES
找到 chroot_list_file
, 如果檔案的位置不對, 那麼修改為
chroot_list_file=/etc/vsftpd/chroot_list
如果前面有 "#
", 那麼要去掉
修改之後, 要記得重新啟動 vsFTPd
systemctl restart vsftpd
如果要修改登陸的預設檔案夾, 那麼輸入指令
usermod -m -d 檔案夾位置 帳戶名稱
修改之後, 要授權這個帳戶這個檔案夾的全部權限, 否則就發生無法上載、修改或著刪除的問題
chown -R 帳戶名稱 檔案夾位置
6. 【One More Thing】嘗試安裝 WordPress
首先進入檔案夾
cd /www
我們通過 WordPress 的網站 https://wordpress.org/download/ 下載 WordPress 的最新版本
wget https://wordpress.org/latest.zip
然後解壓縮
unzip latest.zip
重新命名
mv wordpress blog
授權給 Nginx
chown -R nginx:nginx blog
接著直接訪問 http(s)://你的網域名稱/blog

我們可以看到這個頁面, 直接跟著上面的步驟進行安裝

安裝完成之後, 我們發現, 完全可以正常訪問
自創文章, 原著 : Jonny, 如若需要轉發, 在已經授權的情況下請註明出處 :《在 CentOS 8 下配置 Nginx + PHP 8 + MySQL 8 + phpMyAdmin + vsFTPd》https://jonny.vip/2020/12/11/%e5%9c%a8-centos-8-%e4%b8%8b%e9%85%8d%e7%bd%ae-nginx-php-8-mysql-8-phpmyadmin-vsftpd/
Leave a Reply