Nginx 核心功能

目录

一、基于授权的访问控制

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

[(2)修改密码文件权限为400,将所有者改为nginx ,设置 Nginx 的运行用户能够读取](#(2)修改密码文件权限为400,将所有者改为nginx ,设置 Nginx 的运行用户能够读取)

[(3)修改主配置文件 nginx.conf,添加相应配置项](#(3)修改主配置文件 nginx.conf,添加相应配置项)

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

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

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

三、Nginx虚拟主机

1、基于域名的虚拟主机

(1)设置客户端域名解析

(2)准备各个网站的目录和测试首页

(3)修改配置文件

(4)测试

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

[(1)为服务器设置多个 IP地址](#(1)为服务器设置多个 IP地址)

[(2)修改Nginx 的配置文件,使基于IP的虚拟主机生效](#(2)修改Nginx 的配置文件,使基于IP的虚拟主机生效)

(3)访问两个IP网站,测试页面是否生效

3、基于端口的虚拟主机

[(1)选择系统中不使用的端口,多个端口映射到同一个 IP 地址](#(1)选择系统中不使用的端口,多个端口映射到同一个 IP 地址)

(2)检测端口是否运行正常

[(3)分别访问2 个端口地址](#(3)分别访问2 个端口地址)

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

1、安装mysql

[(1)使用dnf 安装](#(1)使用dnf 安装)

(2)设置密码并测试

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

(1)编译安装PHP

(2)安装后调整

[(3)安装 ZendGuardLoader](#(3)安装 ZendGuardLoader)

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

[(1)启用 php-fpm进程](#(1)启用 php-fpm进程)

[(2)配置Gginx 支持PHP 解析](#(2)配置Gginx 支持PHP 解析)

(3)PHP页面访问测试

[4、在LNMP 平台中部署Web应用](#4、在LNMP 平台中部署Web应用)

(1)下载并部署程序代码

(2)创建数据库

[3、安装 Web应用](#3、安装 Web应用)


一、基于授权的访问控制

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

使用 htpasswd 生成用户认证文件,如果没有该命令,可使用yum安装httpd-tools 软件包。在/usr/local/nginx/日录下生成了 passwd.db文件,用户名是 zhangsan,密码aptech,输入 2 次。在 passwd.db 中生成用户和密码的密文。

复制代码
[root@localhost ~]# yum -y install httpd-tools
[root@localhost ~]# htpasswd -c /usr/local/nginx/passwd.db zhangsan
New password: 
Re-type new password: 
Adding password for user zhangsan

(2)修改密码文件权限为400,将所有者改为nginx ,设置 Nginx 的运行用户能够读取

复制代码
[root@localhost ~]# chmod 400 /usr/local/nginx/passwd.db 
[root@localhost ~]# chown nginx /usr/local/nginx/passwd.db 

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

复制代码
vim /usr/local/nginx/conf/nginx.conf
location / {
            root   html;
            index  index.html index.htm;
            auth_basic "secret";
            auth_basic_user_file /usr/local/nginx/passwd.db;
        }

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

复制代码
[root@localhost ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# systemctl restart nginx

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

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

基于客户端的访问控制是通过客户端IP地址,决定是否允许对页面访问。规则如下:

  • deny IP/IP 段:拒绝某个|P或 IP 段的客户端访问。

  • allow IP/IP 段:允许某个|P或IP 段的客户端访问。

  • 规则从上往下执行,如匹配则停止,不再往下匹配。

修改主配置文件 nginx.conf,添加相应配置项

复制代码
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
        location / {
            root   html;
            index  index.html index.htm;
            # auth_basic "secret";
            #auth_basic_user_file /usr/local/nginx/passwd.db;
            deny 192.168.10.102;
            allow all;
        }

三、Nginx虚拟主机

利用虚拟主机,不用为每个要运行的网站提供一台单独的 Nginx 服务器或单独运行组 Nginx 进程,虚拟主机提供了在同一台服务器,同一组 Nginx 进程上运行多个网站的功能。Nginx 可以配置多种类型的虚拟主机,分别是基于 IP 的虚拟主机、基于域名的虚拟主机、基于端口的虚拟主机。

使用 Nginx 搭建虚拟主机服务器时,每个虚拟 web 站点拥有独立的"server{}"配置段,各自监听的 IP 地址、端口号可以单独指定,当然网站名称也是不同的。

1、基于域名的虚拟主机

(1)设置客户端域名解析

修改hosts文件,加入www.benet.com和www.accp.com 这两个域名。

复制代码
192.168.10.101 www.benet.com
192.168.10.101 www.accp.com

(2)准备各个网站的目录和测试首页

复制代码
[root@localhost ~]# mkdir -p /var/www/html/benet
[root@localhost ~]# mkdir -p /var/www/html/accp
[root@localhost ~]# vim  /var/www/html/benet/index.html
benet
[root@localhost ~]# vim  /var/www/html/accp/index.html
accp

(3)修改配置文件

复制代码
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

    server {
        listen       80;
        server_name www.benet.com;
        access_log logs/www.benet.com.access.log;
        server_name  localhost;

        charset utf-8;

        #access_log  logs/host.access.log  main;

        location / {
            root   /var/www/html/benet;
            index  index.html index.htm;
        }
    }

    server {
        listen       80;
    #    listen       somename:8080;
        server_name  www.accp.com;
        access_log  logs/www.accp.com.access.log;

        location / {
            root   /var/www/html/accp;
            index  index.html index.htm;
        }
    }

[root@localhost ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# systemctl restart nginx

(4)测试

2、基于 IP 的虚拟主机

台主机如果有多个 IP地址,可以设置每一个 IP 对应一个站点。主机安装多个网卡可以有多个 IP,这里采用虚拟 IP 的方式使主机有多个 IP。

(1)为服务器设置多个 IP地址

复制代码
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
ifcfg-ens160
[root@localhost network-scripts]# cp ifcfg-ens160 ifcfg-ens160:0
[root@localhost network-scripts]# cp ifcfg-ens160 ifcfg-ens160:1

[root@localhost network-scripts]# vim ifcfg-ens160:0
NAME=ens160:0
DEVICE=ens160:0
IPADDR=192.168.10.100
[root@localhost network-scripts]# vim ifcfg-ens160:1
NAME=ens160:1
DEVICE=ens160:1
IPADDR=192.168.10.200

[root@localhost network-scripts]# nmcli c reload
[root@localhost network-scripts]# nmcli c up ens160
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3)
[root@localhost network-scripts]# ifconfig
ens160:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.100  netmask 255.255.255.0  broadcast 192.168.10.255
        ether 00:0c:29:18:3b:14  txqueuelen 1000  (Ethernet)

ens160:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.200  netmask 255.255.255.0  broadcast 192.168.10.255
        ether 00:0c:29:18:3b:14  txqueuelen 1000  (Ethernet)

(2)修改Nginx 的配置文件,使基于IP的虚拟主机生效

复制代码
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
    server {
        listen       192.168.10.100:80;
        server_name www.benet.com;
    ......
    }
    
    server {
        listen       192.168.10.200:80;
        server_name  www.accp.com;        
    ......
    }

[root@localhost ~]# systemctl restart nginx

(3)访问两个IP网站,测试页面是否生效

3、基于端口的虚拟主机

(1)选择系统中不使用的端口,多个端口映射到同一个 IP 地址

复制代码
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
    server {
        listen       192.168.10.101:8080;
        server_name www.benet.com;
    ......
    }
    
    server {
        listen       192.168.10.101:8888;
        server_name  www.accp.com;        
    ......
    }

[root@localhost ~]# systemctl restart nginx

(2)检测端口是否运行正常

复制代码
[root@localhost ~]# netstat -anpt | grep nginx
tcp        0      0 192.168.10.101:8888     0.0.0.0:*               LISTEN      1848/nginx: master  
tcp        0      0 192.168.10.101:8080     0.0.0.0:*               LISTEN      1848/nginx: master

(3)分别访问2 个端口地址

四、LNMP 架构部署及应用

1、安装mysql

(1)使用dnf 安装

复制代码
[root@localhost ~]# dnf -y install mariadb-server

[root@localhost ~]# systemctl start mariadb

(2)设置密码并测试

复制代码
[root@localhost ~]# mysqladmin -uroot password 'pwd123'
[root@localhost ~]# mysql -uroot -ppwd123
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 10.5.28-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> exit
Bye

2、安装 PHP 解析环境

(1)编译安装PHP

复制代码
[root@localhost ~]# dnf -y install gd libxml2-devel libjpeg-devel libpng-devel
  • libxm12-devel:libxml 是一个用来解析 XML 文档的函数库
  • libjpeg-devel #是一个完全用C语言编写的库,包含了被广泛使用的 JPEG 解码、JPEG 编码和其他的 JPEG 功能的实现#
  • libpng 是一套免费的、公开源代码的程序库,支持对 PNG 图形libpng-devel文件的创建、读写等操作
  • GD 指的是 Graphic Device,PHP 的 GD 库是用来处理图形的扩展库,通过 GD 库提供的一系列 API,可以对图像进行处理或者直接生成新的图片。PHP 除了能进行文本处理以外,通过 GD 库,可以对 JPG、PNG、GIF、SWF 等图片进行处理
  • zlib-devel #zlib 是一个压缩和解压模块
复制代码
[root@localhost ~]# tar zxvf php-5.5.38.tar.g
[root@localhost ~]# ls
anaconda-ks.cfg  nginx-1.28.0  nginx-1.28.0.tar.gz  php-5.5.38  php-5.5.38.tar.gz

mysql用dnf装的:

复制代码
[root@localhost ~]# cd php-5.5.38
[root@localhost php-5.5.38]# ./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

注:

  • --with-mysqli=mysqlnd 需要用 ip 地址的方式连接数据库,既可以是 php 和 mysql 装在同一个服务器,也可以装在不同的服务器。用127.0.0.1本地连接不需要为连接授权,用192.168.10.101 连接需要授权,哪怕连接本地数据库。
  • --with-mysqli=/usr/bin/mysql_config 需要用 localhost 连接数据库,只能用于本地连接,也就是 php 和 mysql 装在同一个服务器上
复制代码
[root@localhost php-5.5.38]# make && make install

(2)安装后调整

cs 复制代码
[root@localhost php-5.5.38]# cp php.ini-development /usr/local/php5/php.ini
[root@localhost php-5.5.38]# ln -s /usr/local/php5/bin/* /usr/local/bin/
[root@localhost php-5.5.38]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/

(3)安装 ZendGuardLoader

复制代码
[root@localhost ~]# tar zxvf zend-loader-php5.5-linux-x86_64_update1.tar.gz 
zend-loader-php5.5-linux-x86_64/
zend-loader-php5.5-linux-x86_64/ZendGuardLoader.so
zend-loader-php5.5-linux-x86_64/opcache.so
zend-loader-php5.5-linux-x86_64/README.txt
[root@localhost ~]# cd zend-loader-php5.5-linux-x86_64
[root@localhost zend-loader-php5.5-linux-x86_64]# cp ZendGuardLoader.so /usr/local/php5/lib/php/
[root@localhost zend-loader-php5.5-linux-x86_64]# vim /usr/local/php5/php.ini
[PHP]
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so #添加到第二行
zend_loader.enable=1

3、配置 Nginx 支持PHP 环境

(1)启用 php-fpm进程

复制代码
[root@localhost ~]# cd /usr/local/php5/etc/
[root@localhost etc]# 
[root@localhost etc]# cp php-fpm.conf.default php-fpm.conf
[root@localhost etc]# useradd -M -s /sbin/nologin php
[root@localhost etc]# vim php-fpm.conf
pid=run/php-fpm.pid	   #25
user=php	#149
group=php
pm.max_children=50	#230,最多子进程数
pm.start_servers=20		#235,启动时开启的进程数
pm.min_spare_servers=5		#240,最少空闲进程数
pm.max_spare_servers=35	      #245,最多空闲进程数

[root@localhost etc]# /usr/local/sbin/php-fpm
[root@localhost etc]# netstat -anpt | grep php-fpm
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      113731/php-fpm: mas 

[root@localhost ~]# vim /lib/systemd/system/php-fpm.service
[Unit]
Description=The PHP FastCGI Process Manager
After=network.target
[Service]
Type=simple
PIDFile=/usr/local/php5/php-fpm.pip
ExecStart=/usr/local/php5/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php5/etc/php-fpm.
con
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

(2)配置Gginx 支持PHP 解析

调用本机的 php-fpm进程

html 复制代码
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
    server {
        listen       80;
        server_name  www..benet.com;

        charset utf-8;

        #access_log  logs/host.access.log  main;

        location / {
            root   /var/www/html;
            index  index.html index.htm index.php;
        }
        location ~ \.php$ {
            root           /var/www/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            include        fastcgi.conf;
        }
    }

(3)PHP页面访问测试

html 复制代码
[root@localhost ~]# systemctl restart nginx
[root@localhost ~]# systemctl restart php-fpm
[root@localhost ~]# mkdir -p /var/www/html/
[root@localhost ~]# vim /var/www/html/test1.php
<?php
phpinfo();
?>
cs 复制代码
[root@localhost ~]# vim /var/www/html/test2.php
<?php
$link=mysqli_connect('127.0.0.1','root','pwd123');
if($link) echo "<h1>恭喜你,数据库连接成功啦!!!</h1>";
mysqli_close($link);
?>

4、在LNMP 平台中部署Web应用

(1)下载并部署程序代码

cs 复制代码
[root@localhost ~]# dnf -y install unzip
[root@localhost ~]# unzip Discuz_X3.3_SC_UTF8.zip
[root@localhost ~]# mkdir -p /var/www/html/bbs
[root@localhost ~]# mv upload/* /var/www/html/bbs
[root@localhost ~]# chown -R php:php /var/www/html/bbs/

(2)创建数据库

bash 复制代码
[root@localhost ~]# mysql -uroot -ppwd123
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.5.28-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database bbs;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> grant all on bbs.* to [email protected] identified by 'pwd123';
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> grant all on bbs.* to runbbs@'localhost' identified by 'pwd123';
Query OK, 0 rows affected (0.001 sec)

3、安装 Web应用

访问服务器 URL 地址,对网站进行初始化

http://192.168.10.101/bbs/install/index.php

相关推荐
望获linux2 小时前
北京亦庄机器人马拉松:人机共跑背后的技术突破与产业启示
linux·人工智能·机器人·操作系统·开源软件·rtos·具身智能
张槊哲3 小时前
字符和编码(python)
linux·数据库·python
herinspace6 小时前
管家婆易指开单如何设置零售开单
运维·服务器·数据库·软件工程·sass·零售
小镇敲码人7 小时前
【网络层】之IP协议
服务器·网络·tcp/ip
IT阳晨。7 小时前
【嵌入式Linux】基于ARM-Linux的zero2平台的智慧楼宇管理系统项目
linux·arm开发
_清风来叙7 小时前
【Linux】Linux内核模块开发
linux·arm开发
于齐龙7 小时前
pip 常用命令及配置
linux·python·pip
闻道且行之7 小时前
Paddle Serving|部署一个自己的OCR识别服务器
服务器·ocr·paddle
让子弹飞027 小时前
24.Linux中RTC的驱动实验_csdn
linux·ubuntu·stm32mp157·驱动的分离和分层·rtc时间
Johny_Zhao7 小时前
在Ubuntu Server上安装Checkmk监控系统
linux·人工智能·网络安全·信息安全·云计算·shell·yum源·系统运维·checkmk