一、Nginx常用基础模块
https://nginx.org/en/docs/
1、目录索引模块——ngx_http_autoindex_module
(https://nginx.org/en/docs/http/ngx_http_autoindex_module.html)
1)作用:
用于自动生成目录列表。当配置了该模块时,如果访问一个目录而没有指定文件,Nginx 会自动生成一个显示该目录内容的 HTML 列表页面。这个功能对调试或在没有其他索引文件的情况下展示目录结构很有用。
2)配置例子:
server{
listen 10.0.0.7:80;
location /{
autoindex on;
root /web;
index index.html;
}
}
测试结果:
如上图,可以看到,目录无index.html时:
3)autoindex_exact_size
参数
exact:精确的
-
作用:
它是 Nginx 配置中 autoindex 模块的一个指令,用于控制在自动生成的目录列表中是否显示文件的精确字节大小,还是其他单位(KB、MB)显示-
autoindex_exact_size on
:当这个指令设置为 on 时,Nginx 会在自动生成的目录列表中显示每个文件的确切字节大小。例如,如果一个文件的大小是 1234 字节,Nginx 会显示为 “1234”。 -
autoindex_exact_size off
:当这个指令设置为 off 时,Nginx 会显示文件的近似大小,通常是以更易读的格式(如 KB、MB)显示。这对于大文件或文件数量较多的目录,提供了一种更简洁的显示方式。
-
-
配置示例
nginx
location /files/ {
autoindex on; # 启用自动目录列表
autoindex_exact_size on; # 显示文件的精确大小
}
测试结果:
- 设置成“autoindex_exact_size on”后:
- 设置成“autoindex_exact_size off”后:
4)autoindex_format
参数
- 作用:
autoindex_format 是 Nginx autoindex 模块中的一个指令,用于设置自动生成的目录列表的格式。这个指令定义了在目录列表中显示文件和子目录时所用的格式类型。
autoindex_format 意义
autoindex_format:这个指令控制目录列表的显示格式。具体选项可能包括 html、json、xml 等。不同格式适合不同的需求,比如用户在浏览器中查看目录列表还是程序化处理目录数据。
- 具体配置选项
#autoindex_format html
:
作用:
以 HTML 格式生成目录列表。这是默认选项,适合在网页浏览器中查看目录,因为它提供了一个用户友好的界面。
示例配置:
location /files/ {
autoindex on; # 启用目录列表
autoindex_format html; # 使用 HTML 格式
}
测试结果:????
默认html格式显示:
#autoindex_format json
:
作用:
以 JSON 格式生成目录列表。这种格式更适合程序处理,如 API 响应或数据交换。JSON 格式的目录列表易于解析和处理,但不适合直接由用户浏览。
示例配置:
location /files/ {
autoindex on; # 启用目录列表
autoindex_format json; # 使用 JSON 格式
}
测试结果:
#autoindex_format xml
:
作用:
以 XML 格式生成目录列表。XML 格式适用于需要 XML 数据格式的应用场景,例如某些系统或工具需要以 XML 格式读取数据。它比 JSON 更加冗长,但在某些情况下可能更符合要求。
示例配置:
location /files/ {
autoindex on; # 启用目录列表
autoindex_format xml; # 使用 XML 格式
}
测试结果:
- 总结
HTML 格式:适合直接在浏览器中查看,用户界面友好,适合普通用户。
JSON 格式:适合程序处理和数据交换,结构化的数据易于解析和处理。
XML 格式:适合需要 XML 格式的场景,适合某些特定系统或工具。
根据你的使用场景,选择合适的目录列表格式可以提高系统的可用性和数据处理的效率。
5)autoindex_localtime
参数
-
作用:
autoindex_localtime 是 Nginx autoindex 模块中的一个指令,用于设置目录列表中显示的文件和目录的时间是否使用本地时间。
autoindex_localtime:这个指令控制是否在自动生成的目录列表中显示文件的本地时间,而不是默认的 UTC 时间。 -
配置选项
#autoindex_localtime on;
:
作用:
启用本地时间显示。文件和目录的时间戳将以服务器所在时区的本地时间显示,方便本地用户查看。
示例配置:
location /files/ {
autoindex on; # 启用目录列表
autoindex_localtime on; # 使用本地时间显示
}
#autoindex_localtime off;
:
作用:禁用本地时间显示。目录列表中的时间将以 UTC 时间显示,这对处理跨时区的用户或系统比较一致。
示例配置:
location /files/ {
autoindex on; # 启用目录列表
autoindex_localtime off; # 使用 UTC 时间显示
}
作用总结
本地时间显示:更符合本地用户的习惯,尤其是在只有一个时区的环境中。
UTC 时间显示:更适合需要统一时间标准的系统或多时区环境
2、Nginx状态监控模块—— stub_status on;
????
stub?什么意思?与“status”模块的区别
Nginx 状态监控是指使用 Nginx 的 status 模块来查看服务器的运行状态和性能数据。它可以提供有关 Nginx的活动连接、请求处理等信息,帮助管理员监控和优化服务器。
配置方法
安装 nginx-status 模块:
确保 Nginx 是以 nginx-status 模块编译的版本,通常 Nginx 默认已包含该模块配置 nginx-status:
在 Nginx 配置文件(通常是 /etc/nginx/nginx.conf 或
/etc/nginx/conf.d/default.conf)中添加以下内容:server { listen 80; server_name example.com; location /nginx_status { stub_status on; allow 127.0.0.1; # 允许本地访问 deny all; # 拒绝其他 IP 访问 } }
查看状态信息:
重新加载 Nginx 配置使其生效:sudo nginx -s reload 访问
http://example.com/nginx_status 可以看到类似以下的状态信息: Active connections: 291
server accepts handled requests 237389 237389 323477 Reading: 12
Writing: 24 Waiting: 255作用 Active connections:当前活跃的连接数。 server accepts handled
requests:接受的连接数、处理的连接数、请求数。 Reading, Writing,
Waiting:当前的读取、写入和等待状态的连接数。 通过这些信息,可以实时监控 Nginx 的负载和性能。Active connections: 291
- 含义:当前正在与 Nginx 服务器保持活动连接的总数。
- 解释:这包括所有状态的连接,如正在处理请求的连接、等待请求的连接等。291 表示当前有 291 个活跃连接。
server accepts handled requests
- 含义:服务器接受、处理和请求的统计数据。
- 解释:
- accepts:总共接受的连接数。
- handled:总共处理的连接数。通常与
accepts
相同,但在某些情况下,handled
可能比accepts
多或少,取决于连接是否成功处理。- requests:总共处理的请求数。
在此输出中:- 237389(接受的连接数)
- 237389(处理的连接数)
- 323477(请求数)
Reading: 12 Writing: 24 Waiting: 255
- 含义:当前连接的状态统计。
- 解释:
- Reading:正在读取请求的连接数。这些连接正在从客户端读取请求数据。
- Writing:正在向客户端发送响应的连接数。这些连接正在写入数据到客户端。
- Waiting:处于等待状态的连接数。这些连接已经完成请求处理,但还在等待新的请求。
综合理解
- Active connections 显示了服务器的总负载。
- server accepts handled requests 提供了连接和请求的累计数据,有助于了解服务器的处理能力和活动。
- Reading, Writing, Waiting 则提供了当前活动连接的具体状态,有助于诊断请求处理的瓶颈或状态。
这些信息有助于管理员实时监控和诊断 Nginx 服务器的运行状况,帮助优化服务器性能和处理能力。
3、Nginx访问控制——???
1)IP访问控制
2)基于用户密码认证——auth_??
Nginx 的访问控制是管理和限制对你的 Web 服务器或应用程序的访问的机制。它可以通过多种方式实现,包括 IP
地址限制、基于认证的访问控制、地理位置限制等。下面是一些常见的访问控制方法及其配置示例:1. IP 地址限制
你可以通过配置 Nginx 来允许或拒绝特定 IP 地址或 IP 范围的访问。这在保护特定资源或控制访问时非常有用。
配置示例:
listen 80; server_name example.com; location / { # 允许来自 192.168.1.0/24 子网的访问 allow 192.168.1.0/24; # 拒绝其他所有访问 deny all; # 其他配置 root /var/www/html; index index.html; } } ``` ### 2. **基于认证的访问控制** Nginx 支持基本认证和其他形式的身份验证,允许你保护资源仅对认证用户开放。 **基本认证配置示例:** 1. 创建密码文件(使用 `htpasswd` 工具): ```bash htpasswd -c /etc/nginx/.htpasswd user1 ``` 2. 在 Nginx 配置中启用认证: ```nginx server { listen 80; server_name example.com; location / { auth_basic "Restricted Area"; auth_basic_user_file /etc/nginx/.htpasswd; # 其他配置 root /var/www/html; index index.html; } }
3. 限制访问频率
你可以限制请求的频率,以防止滥用和攻击(如 DDoS 攻击)。
限制请求频率配置示例:
# 定义限速区域 limit_req_zone $binary_remote_addr zone=mylimit:10m rate=5r/s; server { listen 80; server_name example.com; location / { # 应用限速 limit_req zone=mylimit burst=10; # 其他配置 root /var/www/html; index index.html; } } } ``` ### 4. **地理位置限制** Nginx 可以基于客户端的地理位置限制访问。这需要 `ngx_http_geoip_module` 模块。 **地理位置限制配置示例:** 1. 确保你已经下载了 GeoIP 数据库,并在 Nginx 配置中指定其路径。 2. 配置地理位置限制: ```nginx http { geoip_country /etc/nginx/GeoIP.dat; server { listen 80; server_name example.com; location / { # 仅允许来自特定国家(例如 US)的访问 if ($geoip_country_code != "US") { return 403; } # 其他配置 root /var/www/html; index index.html; } } } ``` ### 5. **基于请求头的访问控制** 可以使用 Nginx 来限制或允许访问基于特定的请求头信息。 **请求头限制配置示例:** ```nginx server { listen 80; server_name example.com; location / { if ($http_user_agent ~* "BadBot") { return 403; } # 其他配置 root /var/www/html; index index.html; } } ``` ### 总结 Nginx 提供了灵活的访问控制机制,可以帮助你保护资源、限制访问频率、管理用户认证和地理位置限制等。根据实际需求,你可以选择合适的方法和配置来实现有效的访问控制。
二、架构LNMP的简单实现
1、什么是LNMP
2、交互流程原理:
Nginx收到请求,通过Location判断是什么类型的请求:
静态请求:
直接处理
动态请求:
交给fastcgi,交给PHP处理
PHP连接MySQL,返回数据交给Nginx
3、安装配置LNMP
这里使用MariaDB来简单测试,MariaDB也是MySQL吗??????
1)安装Nginx、配置统一用户www(uid=666 gid=666)
/etc/nginx/nginx.conf
2)安装PHP、配置统一用户www(uid=666 gid=666)
/etc/php-fpm.d/www.conf
?????
-
检查本地是否有PHP其他版本
-
安装
-
检查是否安装(端口信息)
3)安装MariaDB、需要配置统一用户?????设置用户密码
- 安装
yum install mariadb-server
-
检查是否安装(端口信息)
-
创建数据库用户密码
#BASH终端命令行下:
mysqladmin -u root password 123
#登录
mysql -u root -p
4、实现LNMP交互——编写Nginx网页配置信息与PHP连通
静态请求配置
location /{
...
}
动态请求配置
如果访问到.php结尾,则跳转到下面配置,交给PHP处理:
#Nginx配置文件server块放置如下内容:
location ~ \.php${
root /code;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
注释:???上述内容的具体意思
location ~ \.php$ {
:此行定义了一个匹配所有以.php
结尾的请求的 location 块。~
表示使用正则表达式匹配。
root .......
:此行指定了 PHP 文件的根目录位置。.......
应替换为实际的目录路径。
fastcgi_pass 127.0.0.1:9000;
:此行将请求转发到 FastCGI 进程,通常是 PHP-FPM 服务器,运行在本地的 9000 端口。
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
:此行设置了一个 FastCGI
参数,SCRIPT_FILENAME
用于告诉 FastCGI 处理哪个 PHP 文件。它组合了
document_root
(请求的根目录)和fastcgi_script_name
(请求的 PHP 文件名)。
include fastcgi_params;
:此行包含了一个外部配置文件fastcgi_params
,该文件定义了更多的 FastCGI 参数,用于正确地传递环境变量和其他设置。在
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
中,$document_root
和$fastcgi_script_name
是 Nginx 的变量,用于构造 FastCGI 请求的文件路径。
$document_root
:表示当前服务器块 (server
块) 中root
指令设置的根目录。即,网站的根目录路径。
$fastcgi_script_name
:表示请求的脚本路径,相对于document_root
。例如,对于请求/index.php
,$fastcgi_script_name
为/index.php
。所以,
$document_root$fastcgi_script_name
是完整的脚本文件路径。例如,如果root
是
/var/www/html
,请求的是/index.php
,那么SCRIPT_FILENAME
就会被设置为
/var/www/html/index.php
。这个路径会被传递给 FastCGI 处理程序,用于执行相应的 PHP 脚本。
整体上,这个配置块的作用是将对.php
文件的请求转发到 PHP-FPM 处理,同时确保正确的文件路径和参数被传递给 PHP。
在 Nginx 的配置文件中,指令 include fastcgi_params; 用于引入其他配置文件的内容,而这个语法和 C语言的语法有一些相似之处,但它们的功能和使用场景有所不同。以下是它们的相似点:
相似点:
- 模块化和复用:
- Nginx 配置文件:include 指令允许将配置文件拆分为多个文件,这样可以将配置逻辑组织得更加清晰和模块化。例如,
include fastcgi_params;
会将 fastcgi_params 文件中的配置参数引入到当前的配置文件中。- C 语言:使用#include 指令可以将头文件或其他源文件的内容引入到当前的文件中。这种方式可以实现代码的模块化和复用。
- 文件导入:
- Nginx 配置文件:include 指令引入的文件是 Nginx 配置文件的一部分,用来引入其他配置指令或参数。
- C语言:#include 指令引入的文件是 C 语言代码的一部分,用来引入函数声明、宏定义、结构体等。
- 语法结构:
- Nginx 配置文件:include 指令后面跟着一个文件名,文件名可以是绝对路径或相对路径。
- C 语言:#include指令后面也跟着一个文件名,这个文件名通常用尖括号 <> 或双引号 “” 包围
不同点:
- 语法和语境:
- Nginx 配置文件:include 是配置文件中的一个指令,用于将另一个配置文件的内容引入到当前的配置中。这是一种配置操作,与 C语言的编译操作没有直接关系。
- C 语言:#include是预处理指令,用于在编译之前将指定文件的内容插入到当前文件中。这是一种代码管理操作,与程序的编译和链接有关。
- 用途:
- Nginx 配置文件:include 用于将配置文件的内容进行合并,便于配置的组织和管理。
- C 语言:#include用于将头文件或源文件的内容插入到程序中,提供必要的声明和定义,以便在编译时使用。
总结来说,include 指令在 Nginx 配置文件和#include 指令在 C 语言中都用于将一个文件的内容引入到另一个文件中,具有模块化和复用的功能。然而,它们在各自的环境中扮演不同的角色,分别用于配置管理和代码管理。
5、实现LNMP交互——编写PHP页面与数据库连通
*6、部署WordPress、WeCenter应用代码
在LNMP(Linux, Nginx, MySQL/MariaDB,
PHP)架构中,WordPress作为一种流行的内容管理系统(CMS)扮演着网站内容管理和发布的核心角色。LNMP架构提供了一个高效的环境来支持WordPress网站的运行。以下是如何在LNMP架构下配置WordPress的步骤:准备环境 确保你已经安装了LNMP栈,包含:
- Linux: 操作系统(例如Ubuntu、CentOS)
- Nginx: Web服务器
- MySQL/MariaDB: 数据库服务器
- PHP: 脚本语言
安装和配置MySQL/MariaDB
- 安装数据库(如果尚未安装):
sudo apt update sudo apt install mysql-server
- 启动MySQL并进行安全配置:
sudo mysql_secure_installation
- 创建WordPress数据库和用户:
CREATE DATABASE wordpress_db DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; CREATE USER 'wordpress_user'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wordpress_user'@'localhost'; FLUSH PRIVILEGES;
安装PHP及相关扩展
- 安装PHP及常用扩展:
sudo apt update sudo apt install php-fpm php-mysql php-xml php-mbstring php-curl
- 配置PHP-FPM: 确保
/etc/php/7.x/fpm/php.ini
中的cgi.fix_pathinfo
设置为0
。ini cgi.fix_pathinfo=0
安装Nginx
- 安装Nginx(如果尚未安装):
sudo apt update sudo apt install nginx
- 配置Nginx: 在
/etc/nginx/sites-available/
目录下创建一个新的配置文件,比如wordpress
。sudo nano /etc/nginx/sites-available/wordpress
然后添加如下配置:
nginx server { listen 80; server_name example.com; root /var/www/wordpress; index index.php index.html index.htm; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.x-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }
替换
example.com
为你的域名,并根据你的PHP版本调整php7.x-fpm.sock
。
- 启用配置并重启Nginx:
sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl restart nginx
下载和配置WordPress
- 下载WordPress:
cd /var/www sudo wget https://wordpress.org/latest.tar.gz sudo tar -xzf latest.tar.gz sudo mv wordpress your_site_directory sudo chown -R www-data:www-data your_site_directory
- 配置WordPress:
复制WordPress配置样本文件:cd your_site_directory sudo cp wp-config-sample.php wp-config.php
编辑
wp-config.php
文件:
sudo nano wp-config.php
修改以下行以匹配你的数据库配置:
define('DB_NAME', 'wordpress_db'); define('DB_USER', 'wordpress_user'); define('DB_PASSWORD','password'); define('DB_HOST', 'localhost');
完成安装
- 打开你的浏览器,访问
http://example.com
(替换为你的域名)。你将看到WordPress的安装界面,按照提示完成安装过程。完成这些步骤后,你的WordPress网站应该已经在LNMP架构下成功配置并运行。
WeCenter是一个基于PHP的社区问答系统,通常用于建立问答网站、论坛或社交网络。在LNMP架构下,WeCenter负责处理网站的内容管理、用户互动和社区功能。以下是如何在LNMP架构下配置WeCenter的步骤:
准备环境 确保LNMP栈已安装并正常运行。
安装和配置MySQL/MariaDB
- 创建WeCenter数据库和用户:
CREATE DATABASE wecenter_db DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; CREATE USER 'wecenter_user'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON wecenter_db.* TO 'wecenter_user'@'localhost'; FLUSH PRIVILEGES;
安装PHP及相关扩展
- 安装PHP及必需扩展:
sudo apt update sudo apt install php-fpm php-mysql php-xml php-mbstring php-curl php-gd
- 配置PHP-FPM: 确保
/etc/php/7.x/fpm/php.ini
中的cgi.fix_pathinfo
设置为0
。cgi.fix_pathinfo=0
安装Nginx
- 安装Nginx(如果尚未安装):
sudo apt update sudo apt install nginx
- 配置Nginx: 在
/etc/nginx/sites-available/
目录下创建WeCenter的配置文件,例如wecenter
。sudo nano /etc/nginx/sites-available/wecenter
添加以下内容:
server { listen 80; server_name example.com; root /var/www/wecenter; index index.php index.html index.htm; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.x-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }
替换
example.com
为你的域名,并根据你的PHP版本调整php7.x-fpm.sock
。
- 启用配置并重启Nginx:
sudo ln -s /etc/nginx/sites-available/wecenter /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl restart nginx
下载和配置WeCenter
- 下载WeCenter:
cd /var/www sudo wget https://github.com/wecenter/wecenter/releases/download/vX.X.X/wecenter-X.X.X.zip sudo unzip wecenter-X.X.X.zip sudo mv wecenter your_site_directory sudo chown -R www-data:www-data your_site_directory
- 配置WeCenter: 访问
http://example.com
,按照WeCenter的安装向导完成配置,输入数据库信息(数据库名、用户名、密码等)。完成安装
- 在浏览器中打开
http://example.com
,按照WeCenter的安装向导完成剩余配置,设置管理员账号等。完成这些步骤后,你的WeCenter社区系统将会在LNMP架构下成功配置并运行。