記錄Ubuntu 20.04 LTS 安裝 Nginx MariaDB PHP 過程。
第一、安裝 NGINX 和 MariaDB
使用下面命令進行安裝:
$ sudo apt update && sudo apt install -y nginx mariadb-server
第二、配置 MariaDB
安裝完成后,首次運行 MySQL / MariaDB 的設置,默認會問我們輸入密碼,我們直接回車即可。
然后輸入 N 並且回車,就可以重置密碼。
$ sudo mysql_secure_installation
連接到 MariaDB 監控器:
$ sudo mariadb
新建一個數據庫:
CREATE DATABASE example_db;
賦予權限(注意修改其中的用戶名和密碼):
GRANT ALL ON example_db.* TO 'username'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
更新權限:
FLUSH PRIVILEGES;
exit
再次連接:
$ mariadb -u username -p
確保可以正常連接:
SHOW DATABASES;
設置為當前數據庫:
USE example_db;
新建一個表以進行后續測試:
CREATE TABLE table1(column1 varchar(255));
INSERT INTO table1 VALUES("Database connection established successfully");
exit
第三、安裝 PHP 和 Certbot
安裝 php-fpm 和 php-mysql
$ sudo apt install -y php-fpm php-mysql
安裝 snap:
$ sudo apt install -y snap
安裝 certbot:
$ sudo snap install --classic certbot
第四、配置 NGINX
新建一個網站目錄比如 laozuo.org(注意替換 example.com):
$ sudo mkdir -p /var/www/example.com
設置正確權限:
$ sudo chown -R $USER:$USER /var/www/example.com
新建一個配置文件:
$ sudo vim /etc/nginx/sites-available/example.com
填寫下面配置信息:
server {
listen 80;
listen [::]:80;
server_name www.example.com;
server_name example.com;
root /var/www/example.com;
location / {
index index.html;
}
}
重啟 NGINX:
$ sudo systemctl restart nginx.service
運行一次 certbot:
$ sudo certbot certonly --dry-run --nginx -d example.com,www.example.com
獲取 LetsEncrypt 證書:
$ sudo certbot certonly --nginx -d example.com,www.example.com
打開 NGINX 配置文件:
$ sudo vim /etc/nginx/sites-available/example.com
將所有內容都刪除,然后復制下面內容進去:
server {
listen 80;
listen [::]:80;
server_name www.example.com;
server_name example.com;
root /var/www/example.com;
location / {
return 301 https://example.com$request_uri;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
root /var/www/example.com;
index index.php index.html index.htm index.nginx-debian.html;
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "default-src 'self'; script-src 'self';";
add_header Referrer-Policy "no-referrer";
add_header X-Frame-Options "SAMEORIGIN" always;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
server_name www.example.com;
server_name example.com;
access_log /var/log/example.com.log;
error_log /var/log/example.com.error.log;
}
添加軟連接:
$ sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
重啟 NGINX:
$ sudo systemctl restart nginx.service
第五、效果測試
新建一個文件:
$ vim /var/www/example.com/testdb.php
添加如下內容:
<?php
$mysqli = new mysqli("localhost", "username", "password", "example_db");
if (mysqli_connect_errno()) {
printf("Connection failed: %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT column1 FROM table1";
if($result = $mysqli->query($query)) {
while($row = $result->fetch_row()){
printf("%s\n", $row[0]);
}
$result->close();
}
$mysqli->close();
?>
打開下面鏈接測試是否OK。