Nginx 核心功能

目录

一、基于授权的访问控制

[1. 基于授权的访问控制简介](#1. 基于授权的访问控制简介)

[2. 基于授权的访问控制步骤](#2. 基于授权的访问控制步骤)

二、基于客户端的访问控制

[1. 基于客户机端的访问控制简介](#1. 基于客户机端的访问控制简介)

[2. 基于客户端的访问控制步骤](#2. 基于客户端的访问控制步骤)

[三、Nginx 虚拟主机](#三、Nginx 虚拟主机)

[1. 基于域名的虚拟主机](#1. 基于域名的虚拟主机)

[2. 基于 IP 的虚拟主机](#2. 基于 IP 的虚拟主机)

[3. 基于端口的虚拟主机](#3. 基于端口的虚拟主机)

[四、LNMP 架构部署及应用](#四、LNMP 架构部署及应用)

[1. 编译安装 MySQL 服务](#1. 编译安装 MySQL 服务)

[2. 安装PHP解析环境](#2. 安装PHP解析环境)

[3. 配置配置Nginx支持PHP环境](#3. 配置配置Nginx支持PHP环境)

[4. 关联LNMP,部署Web应用](#4. 关联LNMP,部署Web应用)


一、基于授权的访问控制

1. 基于授权的访问控制简介

  • 概述:Nginx 与 Apache 一样,可以实现基于用户授权的访问控制,当客户端想要访问相应网站或者目录时,要求用户输入用户名和密码才能正常访问
  • 步骤:
  1. 生成用户密码认证文件 ------》
  2. 修改主配置文件相应对应目录,添加认证配置项 ------》
  3. 重启服务,访问测试

2. 基于授权的访问控制步骤

(1)使用 htpasswd 生成用户认证文件

  1. 安装 httpd-tools 软件包
bash 复制代码
yum -y install httpd-tools
  1. 生成认证文件
bash 复制代码
htpasswd -c /usr/local/nginx/passwd.db test   # test 是用户名
cat /usr/local/nginx/passwd.db   #查看生成用户和密码的密文

(2)修改密码文件权限

bash 复制代码
chmod 400 /usr/local/nginx/passwd.db    #权限为400
chown nginx /usr/local/nginx/passwd.db   #所有者改为nginx
ll -d /usr/local/nginx/passwd.db   #查看

(3)修改主配置文件 nginx.conf ,添加相应的认证配置项

bash 复制代码
vim /usr/local/nginx/conf/nginx.conf    
server {  
    listen 80;  
    server_name example.com;  

    location /admin {  
        auth_basic "Restricted Area";          # 启用认证,显示提示信息  
        auth_basic_user_file /etc/nginx/.htpasswd;  # 指定密码文件路径  

        # 其他配置...  
    }  
}  

(4)检测语法、重启服务

复制代码
nginx -t  #检测是否错误
systemctl restart nginx  #重启

(5)用浏览器访问网址,验证控制效果

二、基于客户端的访问控制

1. 基于客户机端的访问控制简介

基于客户端的访问控制通过 IP 地址子网段 限制访问权限,支持以下两种模式:

  • 白名单模式:仅允许指定 IP 访问,其他全部拒绝。

  • 黑名单模式:仅拒绝指定 IP,其他全部允许。

规则

  • deny IP/IP 段:拒绝某个IP或IP段的客户端访问。
  • allow IP/IP段:允许某个IP或IP段的客户端访问。
  • 规则从上往下执行,如匹配则停止,不再往下匹配

2. 基于客户端的访问控制步骤

bash 复制代码
server {  
    listen 80;  
    server_name example.com;  

    location /secure {  
        # 白名单示例:允许 192.168.1.0/24 和 10.0.0.5,拒绝其他所有  
        allow 192.168.1.0/24;  
        allow 10.0.0.5;  
        deny all;  

        # 黑名单示例:拒绝特定 IP,允许其他所有  
        # deny 203.0.113.1;  
        # deny 198.51.100.0/24;  
        # allow all;  

        # 其他配置...  
    }  
}  

三、Nginx 虚拟主机

1. 基于域名的虚拟主机

场景 :多个域名解析到同一 IP 地址,Nginx 根据 Host 头区分请求目标

步骤:

bash 复制代码
1.创建站点目录,在目录下创建测试文件
	mkdir -p /var/www/html/目录名
	vim index.html
bash 复制代码
2.在配置文件(/usr/local/nginx/conf/nginx.conf)中添加"server"模块,用于设置站点配置 

# 网站1:www.benet.com  
server {  
    listen 80;  
    server_name www.example.com;  #域名
    access_log logs/www/benet.com.access.log; #记录日志文件位置
    index index.html;  

    location / {  
        root  /var/www/html/benet        #站点目录路径
        try_files $uri $uri/ =404;  
    }  
}  

# 网站2:www.blog.com  
server {  
    listen 80;  
    server_name www.blog.com;  
    access_log logs/www/blog.com.access.log; 
    index index.html;  

    location / {  
        root /var/www/html/blog;
        try_files $uri $uri/ =404;  
    }  
}  

2. 基于 IP 的虚拟主机

场景:服务器有多个 IP 地址,每个 IP 绑定独立网站。

bash 复制代码
# 绑定到 IP 192.168.1.100  
server {  
    listen 192.168.1.100:80;  
    server_name _;  # 无需指定域名  
    root /var/www/site1;  
    index index.html;  
}  

# 绑定到 IP 192.168.1.200  
server {  
    listen 192.168.1.200:80;  
    server_name _;  
    root /var/www/site2;  
    index index.html;  
}  

3. 基于端口的虚拟主机

场景:同一 IP 的不同端口提供不同服务(如 80 端口提供 Web,8080 端口提供管理后台)。

bash 复制代码
# 监听 80 端口(HTTP 默认端口)  
server {  
    listen 80;  
    server_name example.com;  
    root /var/www/main;  
    index index.html;  
}  

# 监听 8080 端口(管理后台)  
server {  
    listen 8080;  
    server_name example.com;  
    root /var/www/admin;  
    index index.html;  

    # 可选:限制访问 IP  
    allow 192.168.1.0/24;  
    deny all;  
}  

四、LNMP 架构部署及应用

1. 编译安装 MySQL 服务

bash 复制代码
简化版mariadb
1.下载mariadb(yum -y install mariadb-server)
2.重启服务  systemctl start mariadb
3.生成密码  mysqladmin -uroot password '密码'

2. 安装PHP解析环境

(1)安装PHP

bash 复制代码
yum -y install gd libxml2-devel libjpeg-devel libpng-devel	#下载php所需要的依赖包
tar zxf php-5.5.38.tar.gz		#解压缩文件
cd php
./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib	#编译安装

make && make install

#安装后调整
cp php.ini-development /usr/local/php5/php.ini
ln -s /usr/local/php5/bin/* /usr/local/bin/	#软链接
ln -s /usr/local/php5/sbin/* /usr/local/sbin/	#软连接

(2)安装ZendGuardLoader

bash 复制代码
tar zxf zend-loader-php5.5-linux-x86_64_update1.tar.gz
ls
cp zend-loader-php5.5-linux-x86_64/ZendGuardLoader.so /usr/local/php5/lib/php/		##复制出来

vim /usr/local/php5/php.ini		#添加两行内容
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
zend_loader.enable=1

3. 配置配置Nginx支持PHP环境

(1)启用php-fpm进程

bash 复制代码
[root@localhost ~]# cd /usr/local/php5/etc
[root@localhost etc]# cp php-fpm.conf.default php-fpm.conf
[root@localhost etc]# useradd -M -s /sbin/nologin php
[root@localhost etc]# vi /usr/local/php5/etc/php-fpm.conf
pid = run/php-fpm.pid
user = php              
group = php            
pm.max_children = 50      
pm.start_servers = 20      
pm.min_spare_servers = 5     
pm.max_spare_servers = 35
 
[root@localhost etc]# /usr/local/sbin/php-fpm
[root@localhost etc]# netstat -anpt | grep php-fpm

[root@localhost etc]# systemctl restart nginx

(2)配置Nginx支持PHP解析

bash 复制代码
 [root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
  server {
        listen       80;
        server_name  www.bt.com;
        charset utf-8;
        access_log  logs/host.access.log  ;
        location / {
            root   /var/www/html;
            index  index.html index.htm index.php;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
  }
        location /status {
 		stub_status on;
		access_log off;
		}
   #添加以下php配置
       location ~ \.php$ {
           root           /var/www/html/;
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_index  index.php;
      #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
           include        fastcgi.conf;
       }
}
 [root@localhost ~]# systemctl restart nginx

(3) PHP页面的测试

bash 复制代码
a.浏览器访问测试页(test1)
[root@localhost ~]# vi /var/www/html/test1.php
<?php
phpinfo();
?>

b. 浏览器访问测试页(test2)
[root@localhost ~]# vi /var/www/html/test2.php
<?php
$link=mysqli_connect('127.0.0.1','root','pwd123');
if($link)
echo "恭喜你,数据库连接成功!";
mysqli_close($link);
?>

/usr/local/php5/sbin/php-fpm 		#启动php
netstat -anpt |grep php		#查看php启动没有


访问会乱码
vim /usr/local/nginx/conf/nginx.conf
charset utf-8;

更改了test2.php的ip 127.0.0.1 改为192.168.10.101 访问失败 给root一个权限

mysql -uroot -ppwd123	#登录MySQL
grant all on *.* to root@'%' identified by 'pwd123';

grant all on *.* to root@'localhost' identified by 'pwd123';	#

访问URL 192.168.10.101/test1/2.php

4. 关联LNMP,部署Web应用

bash 复制代码
1:部署网站程序代码
[root@localhost ~]# yum -y install unzip
[root@localhost ~]# unzip Discuz_X3.3_SC_UTF8.zip 
[root@localhost ~]# mv upload/ /var/www/bdqn/bbs
[root@localhost ~]# chown -R php:php /var/www/bdqn/bbs

2:创建数据库
[root@localhost ~]# mysql -u root -p
Enter password: 
mysql> create database bbs;
mysql> grant all on bbs.* to runbbs@localhost identified by 'bbs@yh123';

3:安装web网站
用浏览器访问网站:
www.bdqn.com/bbs
相关推荐
大聪明-PLUS18 小时前
如何使用 Docker 打包一个简单的应用程序:简易指南
linux·嵌入式·arm·smarc
执念WRD19 小时前
熊海CMS v1.0代码审计实战
android·nginx·安全·web安全·网络安全·系统安全
深耕AI20 小时前
【完整教程】宝塔面板FTP配置与FileZilla连接服务器
运维·服务器
serve the people20 小时前
Prompts for Chat Models in LangChain
java·linux·langchain
李昊哲小课20 小时前
Ubuntu 24.04 MariaDB 完整安装与配置文档
linux·ubuntu·mariadb
无聊的小坏坏21 小时前
从单 Reactor 线程池到 OneThreadOneLoop:高性能网络模型的演进
服务器·网络·一个线程一个事件循环
AI智域边界 - Alvin Cho1 天前
Bloomberg、LSEG 与 MCP 缺口:为什么尚未发布完整的 MCP 服务器,以及多智能体系统如何解決这问题
运维·服务器
人间打气筒(Ada)1 天前
zerotier内网穿透部署(rockylinux部署本地服务器)超详细~~~
linux·内网穿透·内网·公网·zerotier·穿透
Elias不吃糖1 天前
Git常用指令合集
linux·git
_OP_CHEN1 天前
Linux网络编程:(七)Vim 编辑器完全指南:从入门到精通的全方位实战教程
linux·运维·服务器·编辑器·vim·linux生态·linux软件