目錄
- 寫在前面
- Nginx03
- 案例1 模擬視頻下載網站
- 自動索引autoindex
- 基礎認證auth_basic模塊
- 狀態stub_status模塊
- 模塊小結
- 案例2 動態網站(部署php代碼)
- 概述
- 常見的動態網站的架構
- LNMP
- 架構流程
- 數據庫Mariadb
- 安裝
- 安全配置
- 基本操作
- PHP
- 安裝php
- 修改配置文件
- Nginx+Wordpress
- 編輯Nginx
- 安裝wordpress
- 訪問主頁
寫在前面
這是Nginx第三篇,內容為Nginx自動索引模塊、基礎認證模塊、狀態模塊、動態資源介紹、LNMP介紹與實驗等。
上篇筆記 Nginx02-Nginx虛擬主機介紹、日志介紹、Location規則介紹
Nginx03
案例1 模擬視頻下載網站
需求:
- 瀏覽器打開,顯示目錄結構(autoindex模塊)
- 部分文件夾需登錄認證功能(auth_basic模塊)
- 統計nginx服務,訪問狀態(stub_status模塊)
- 域名:v.test.com,目錄:/app/code/v
ngx模塊是眾多ngx指令的集合.
自動索引autoindex
首頁不存在時,會使用autoindex模塊
- autoindex on: 開啟目錄索引功能(顯示站點目錄下的文件的列表,首頁文件不存在.)
- autoindex_localtime on: 顯示本地時間.
- autoindex_exact_size off:是否顯示精確的文件的大小. off表示以人類可讀形式顯示大小
實現瀏覽器打開,顯示目錄結構(文件模擬即可)
# 設置子配置文件
[root@front conf.d]# cat v.test.com.conf
server {listen 80;server_name v.test.com;root /app/code/v;error_log /var/log/nginx/v.test.com-error.log notice;access_log /var/log/nginx/v.test.com-access.log main;autoindex on; #開啟目錄索引功能(首頁文件不存在時,顯示站點目錄下的文件的列表)charset utf8; # 中文字符autoindex_localtime on; # 系統本地時間autoindex_exact_size off; # 人類可讀的大小顯示location / {index index.html;}
}# 新建目錄
[root@front conf.d]# mkdir -p /app/code/v
[root@front conf.d]# touch /app/code/v/test{1..10}.mp4# 檢查語法并重啟服務
[root@front conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@front conf.d]# systemctl reload nginx
基礎認證auth_basic模塊
nginx中最基礎的認證模塊
- auth_basic “請輸入密碼:”; #輸出提示,根據不同瀏覽器,可能不顯示.
- auth_basic_user_file conf/htpasswd; #指定用戶名,密碼文件
登錄認證
登陸的用戶有auth目錄,需要登錄才能訪問,直接退出會401
報錯
# 修改子配置文件
[root@front conf.d]# cat v.test.com.conf
server {listen 80;server_name v.test.com;root /app/code/v;error_log /var/log/nginx/v.test.com-error.log notice;access_log /var/log/nginx/v.test.com-access.log main;autoindex on;charset utf8;autoindex_localtime on;autoindex_exact_size off;location / {index index.html;}location /auth/ { # 新增locationauth_basic "提示-請輸入密碼:"; #認證提示auth_basic_user_file /etc/nginx/user; #認證密碼文件路徑}
}# 新建目錄
[root@front conf.d]# mkdir -p /app/code/v/auth/
[root@front conf.d]# touch /app/code/v/auth/auth{1..5}.mp5# 新建密碼文件
## 安裝httpd-tools,需要用到htpasswd工具
[root@front conf.d]# yum install -y httpd-tools## 創建加密的密碼文件并新增用戶
[root@front conf.d]# htpasswd -bc /etc/nginx/user test test #-b不使用交互模式,-c新增一個密碼文件(若有內容會清空)
Adding password for user test
[root@front conf.d]# htpasswd -b /etc/nginx/user tassel tassel
Adding password for user tassel
[root@front conf.d]# cat /etc/nginx/user
test:$apr1$DYOgLaoY$GKNgriUjduo/r7s5ous4v.
tassel:$apr1$iQF6rDr0$.Pwe8qmNOi6jxUMD4deI4.## 修改權限
[root@front conf.d]# chmod 600 /etc/nginx/user
[root@front conf.d]# chown nginx.nginx /etc/nginx/user# 語法檢查并重啟
[root@front conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@front conf.d]# systemctl reload nginx
狀態stub_status模塊
顯示nginx當前狀態,信息。顯示nginx服務的狀態,用戶訪問的狀態.
stub_status; #顯示nginx
# 編寫子配置文件
[root@front conf.d]# cat v.test.com.conf
server {listen 80;server_name v.test.com;root /app/code/v;error_log /var/log/nginx/v.test.com-error.log notice;access_log /var/log/nginx/v.test.com-access.log main;autoindex on;charset utf8;autoindex_localtime on;autoindex_exact_size off;location / {index index.html;}location /auth/ {auth_basic "提示-請輸入密碼:";auth_basic_user_file /etc/nginx/user;}location /status/ { # 新增此部分,注意,此部分是uri,而不是一個文件夾,所以可以不用新建該路徑文件夾stub_status; #啟用統計功能,注意,顯示所有站點,而非僅當前虛擬主機}
}# 語法檢查并重啟
[root@front conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@front conf.d]# systemctl reload nginx# 內容解析
## 壓測
[root@front conf.d]# ab -n 999999 -c 3 -H Host:v.test.com http://192.168.100.148/
# ab是Apache Bench的縮寫,它是一個用于測試Web服務器性能的工具。ab可以發送多個HTTP請求到服務器,并報告服務器的響應時間、傳輸速度等性能指標。命令行中的參數含義如下:
# -n 999999:指定總共發送的請求次數為999999次。
# -c 3:指定并發連接數為3,即同時有3個請求發送到服務器。
# -H Host:v.test.com:添加一個HTTP請求頭,設置Host頭的值為v.test.com。這通常用于測試虛擬主機的性能,或者當服務器根據Host頭來處理請求時。
# http://192.168.100.148/:指定要測試的服務器的URL。這里是一個本地網絡中的IP地址,表示ab將向該地址發送請求。## status下內容
Active connections: 3
server accepts handled requests61576 61576 61579
Reading: 0 Writing: 1 Waiting: 2
# Active connections: 當前活動狀態的連接數。這是當前Nginx正在處理的連接數量,包括正在讀取請求、正在寫入響應或正在等待客戶端發送下一個請求的連接。
# server accepts handled requests下的三個參數:
# accepts: 總共接受的連接數。這是自從Nginx啟動以來接受的連接總數。
# handled: 總共處理的連接數。通常這個數字和accepts相同,因為Nginx能夠處理所有接受的連接。
# requests: 總共處理的請求數。這是自從Nginx啟動以來處理的總請求數量。這個數字可能會比accepts大,因為同一個連接可能會發送多個請求(例如,在一個Keep-Alive連接中)。
# Reading: 當前正在讀取請求頭的連接數。這是Nginx正在從客戶端讀取請求頭的連接數量。
# Writing: 當前正在寫入響應的連接數。這是Nginx正在向客戶端發送響應的連接數量。
# Waiting: 當前等待請求的空閑連接數。這是打開著但是目前沒有讀取或寫入活動的連接數量。這些連接可能處于Keep-Alive狀態,等待客戶端發送下一個請求。
- 狀態模塊中的指標:
指標 | 說明 |
---|---|
Active connections | 當前已經建立的連接數(est)和等待數量,體現Nginx并發能力 |
server accepts | 已經接收到客戶端的連接總數 |
handled | 服務端已經處理的連接 |
requests | 客戶端發出請求的總數 |
reading | 正在讀取的請求頭連接數量 |
writing | 正在進行的響應的連接數量 |
waiting | 排隊數量,反映排隊情況 |
模塊小結
- nginx模塊就是nginx指令的集合
模塊 | 模塊中的核心指令 |
---|---|
目錄索引模塊 | autoindex on; |
認證功能模塊 | auth_basic_user_file; |
訪問控制模塊 | allow,deny |
狀態模塊 | stub_status |
nginx 核心模塊 | root,location,error_log,server_name,listen |
nginx 日志模塊 | access_log,log_format,error_log |
案例2 動態網站(部署php代碼)
概述
網站架構 | 說明與特點 | 性能 | 1句話說明 |
---|---|---|---|
靜態網站 | 網站僅僅包含HTML、CSS樣式、JS腳本、圖片、視頻等靜態資源。只需要web服務器即可:nginx,可以承受較高的訪問量。不支持動態的功能,如注冊、評論,功能單一。 | 高 | 瀏覽器端解析(客戶端解析),服務端僅僅負責發送. |
動態網站 | 動態網站一般是通過開發語言實現:Java、PHP、Python、Golang等。動態資源頁面需要服務器進行處理:nginx+php/tomcat+數據庫。 | 一般 | 動態請求需要服務端進行處理與解析,把結果給用戶. |
- 區分靜態/動態資源:
- url中包含
&
或?
一般都是動態資源
常見的動態網站的架構
L: Linux, N: Nginx, M: Mysql, A: Apache, W: Windows
- PHP:LNMP(LEMP), LAMP, WNMP/WAMP
- Java: LNMT(Tomcat,Jetty,Weblogic,Jboss)
- Python: LNMP(Python,uwsgi)
- Golang: LNMG(Golang)
- C/C++
LNMP
架構流程
- 用戶通過http協議發送請求
- Nginx分流動/靜態資源,靜態自己處理,動態請求丟給PHP
- Nginx通過fastcgi
協議把動態請求丟給PHP
- PHP處理動態請求,若需要數據,則連接數據庫Mysql
數據庫Mariadb
安裝
yum install -y mariadb-server
# mariadb-server 服務端
# mariadb 客戶端systemctl start mariadb
systemctl enable mariadb# 驗證
[root@db01 ~]# ss -tunlp | grep mysql
tcp LISTEN 0 80 *:3306 *:* users:(("mysqld",pid=14433,fd=21))
[root@db01 ~]# ps -ef | grep mysql
mysql 14433 1 0 20:35 ? 00:00:00 /usr/libexec/mysqld --basedir=/usr
root 14974 14928 0 20:39 pts/0 00:00:00 grep --color=auto mysql
安全配置
mysql_secure_installation #僅僅剛安裝的時候運行.僅首次運行即可.
#用于設置root密碼,清理用戶和清理臨時庫.Enter current password for root (enter for none): #回車即可
OK, successfully used password, moving on...Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.You already have a root password set, so you can safely answer 'n'.Change the root password? [Y/n] y #輸入y
New password: #輸入密碼
Re-enter new password: #再次輸入密碼
Password updated successfully!
Reloading privilege tables..... Success!Remove anonymous users? [Y/n] y #y刪除數據庫中的匿名用戶... Success!Disallow root login remotely? [Y/n] y #y禁止root遠程登陸... Success!Remove test database and access to it? [Y/n] y #y刪除test測試用數據庫Reload privilege tables now? [Y/n] y #y更新權限信息表... Success!
基本操作
- 進入數據庫
mysql -uroot -p密碼 [-h IP]
#不要有空格,也可以不輸入密碼,等交互式時輸入
數據庫基本概念請自行了解,庫->表->字段(屬性/投影/列)->記錄(元組/行)
- 查看
# 查看數據庫
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.001 sec)# 查看表
MariaDB [(none)]> show tables from mysql;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| column_stats |
| columns_priv |
| db |
| event |
...#查看某些字段(列),篩選記錄(行)
## 篩選mysql數據庫中user表的user和host列的記錄
## -G行的內容以列顯示
MariaDB [(none)]> select user,host from mysql.user ;
+------+-----------+
| user | host |
+------+-----------+
| root | 127.0.0.1 |
| root | ::1 |
| root | localhost |
+------+-----------+
3 rows in set (0.000 sec)
- 創建
# 創建數據庫
MariaDB [(none)]> create database test;
Query OK, 1 row affected (0.000 sec)MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.001 sec)# 創建用戶,進行授權
MariaDB [(none)]> grant all on test.* to 'test'@'%' identified by 'test';
Query OK, 0 rows affected (0.000 sec)
## grant 權限 on 數據庫.表 to '用戶'@'登錄白名單' identified by '密碼';
## 一般localhost表示只能在數據庫本地使用.
## 可以通過192.168.100.% 進行授權局域網訪問. 其他局域網機器可以訪問數據庫.
## 只給個 % 表示所有人可以訪問(不安全). %不包含localhost.
### ALL: 所有可用的權限
### CREATE: 創建庫、表和索引
### LOCK_TABLES: 鎖定表
### ALTER: 修改表
### DELETE: 刪除表
### UPDATE: 更新數據
### INSERT: 插入表或列
### SELECT: 檢索表或列的數據
### CREATE_VIEW: 創建視圖
### SHOW_DATABASES: 列出數據庫
### DROP: 刪除庫、表和視圖
- 刪除
# 刪除數據庫
MariaDB [(none)]> drop database test;
Query OK, 0 rows affected (0.001 sec)MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.000 sec)# 刪除用戶(revoke刪除授權)
MariaDB [(none)]> drop user 'test'@'%';
Query OK, 0 rows affected (0.001 sec)MariaDB [(none)]> select user,host from mysql.user;
+------+-----------+
| user | host |
+------+-----------+
| root | 127.0.0.1 |
| root | ::1 |
| root | localhost |
+------+-----------+
3 rows in set (0.001 sec)
PHP
選擇php 7.x
安裝php
# 安裝php
## 若是centos7,可以輸入以下yum源和安裝命令
[root@front conf.d]# cat /etc/yum.repos.d/php.repo
[webtatic-php]
name = php Repository
baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64
enabled = 1
gpgcheck = 0[root@front conf.d]# yum install -y php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mcrypt php72w-mbstring php72w-pdo php72w-xml php72w-fpm php72w-mysqlnd php72w-opcache php72w-pecl-memcached php72w-pecl-redis php72w-pecl-mongodb## centos8可以直接使用默認的yum源安裝
[root@front conf.d]# yum install -y php*
[root@front conf.d]# php -v
PHP 7.2.24 (cli) (built: Oct 22 2019 08:28:36) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologieswith Zend OPcache v7.2.24, Copyright (c) 1999-2018, by Zend Technologies# 啟動php
[root@front conf.d]# systemctl enable php-fpm --now
Created symlink /etc/systemd/system/multi-user.target.wants/php-fpm.service → /usr/lib/systemd/system/php-fpm.service.
修改配置文件
php默認使用的時apache,但要求用nginx,所以修改配置文件,使其使用nginx
yum安裝的php,默認listen監聽的是socket,要修改成127.0.0.1:9000
[root@front conf.d]# egrep -n "^user|^group" /etc/php-fpm.d/www.conf
24:user = apache
26:group = apache
[root@front conf.d]# egrep -n "^listen" /etc/php-fpm.d/www.conf
38:listen = /run/php-fpm/www.sock# 修改配置文件
[root@front conf.d]# sed -i 's/user = apache/user = nginx/g' /etc/php-fpm.d/www.conf
[root@front conf.d]# sed -i 's/group = apache/group = nginx/g' /etc/php-fpm.d/www.conf
[root@front conf.d]# egrep -n "^user|^group" /etc/php-fpm.d/www.conf
24:user = nginx
26:group = nginx[root@front conf.d]# sed -i 's/listen = /run/php-fpm/www.sock/listen = 127.0.0.1:9000/g' /etc/php-fpm.d/www.conf
sed: -e expression #1, char 18: unknown option to `s'
[root@front conf.d]# sed -i 's|listen = /run/php-fpm/www.sock|listen = 127.0.0.1:9000|g' /etc/php-fpm.d/www.conf
[root@front conf.d]# egrep -n "^listen" /etc/php-fpm.d/www.conf
38:listen = 127.0.0.1:9000
Nginx+Wordpress
編輯Nginx
# 編寫子配置文件
[root@front conf.d]# cat blog.test.com.conf
server {listen 80;server_name blog.test.com;root /app/code/blog;error_log /var/log/nginx/blog.test.com-error.log notice;access_log /var/log/nginx/blog.test.com-access.log main;location / {index index.php;}location ~* \.php$ {# foward to phpfastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;# 修改以下fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}
}#
安裝wordpress
官方下載鏈接:https://wordpress.org/download/releases/#branch-61
我選用的是6.1.1
# 解壓并移動到對應站點目錄
unzip wordpress-6.1.1.zip
mv wordpress/* /app/code/blog/# 修改權限
[root@front conf.d]# chown -R nginx.nginx /app/code/blog
訪問主頁
wordpress的教程網上特別多,這里不贅述,只是作為動態資源的演示