Nginx 与 Apache 一样,可以实现基于用户授权的访问控制,当客户端想要访问相应网站或者目录时,要求用户输入用户名和密码才能正常访问,配置步骤与 Apache 基本一致。
概括为以下几个步骤:
(1)使用 htpasswd 生成用户认证文件
使用 htpasswd 生成用户认证文件,如果没有该命令,可使用 yum 安装 httpd - tools 软件包,用法与 Apache 认证时方式相同,如:htpasswd -c /usr/local/nginx/passwd.db test。在 /usr/local/nginx/ 目录下生成了 passwd.db 文件,用户名是 test,密码输入 2 次。在 passwd.db 中生成用户和密码的密文。
[root@localhost ~]# yum -y install httpd-tools
[root@localhost ~]# htpasswd -c /usr/local/nginx/passwd.db test
[root@localhost ~]# cat /usr/local/nginx/passwd.db
(2)修改密码文件权限为 400,将所有者改为 nginx,设置 Nginx 的运行用户能够读取
[root@localhost ~]# chmod 400 /usr/local/nginx/passwd.db
[root@localhost ~]# chown nginx /usr/local/nginx/passwd.db
[root@localhost ~]# ll -d /usr/local/nginx/passwd.db
(4)检测语法、重启服务
[root@localhost ~]# nginx -t
[root@localhost ~]# systemctl restart nginx
(5)用浏览器访问网址,检验控制效果
基于客户端的访问控制是通过客户端 IP 地址,决定是否允许对页面访问。Nginx 基于客户端的访问控制要比 Apache 简单,规则如下:
(3)修改主配置文件 nginx.conf, 添加相应认证配置项
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
auth_basic "secret";
auth_basic_user_file /usr/local/nginx/passwd.db;
}
}
(1)修改主配置文件 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.3;
allow all;
}
利用虚拟主机,不用为每个要运行的网站提供一台单独的 Nginx 服务器或单独运行一组 Nginx 进程,虚拟主机提供了在同一台服务器,同一组 Nginx 进程上运行多个网站的功能。跟 Apache 一样,Nginx 也可以配置多种类型的虚拟主机,分别是基于 IP 的虚拟主机、基于域名的虚拟主机、基于端口的虚拟主机。
使用 Nginx 搭建虚拟主机服务器时,每个虚拟 Web 站点拥有独立的 “server {}” 配置段,各自监听的 IP 地址、端口号可以单独指定,当然网站名称也是不同的。
(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 ~]# echo "www.benet.com">>/var/www/html/benet/index.html
[root@localhost ~]# echo "www.accp.com">>/var/www/html
(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;
charset utf-8;
location / {
root /var/www/html/benet;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name www.accp.com;
access_log logs/www.accp.com.access.log;
charset utf-8;
location / {
root /var/www/html/accp;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
[root@localhost ~]# nginx -t
[root@localhost ~]# systemctl restart nginx
(4)测试
[root@bogon ~]# curl www.benet.com
www.benet.com
[root@bogon ~]# curl www.accp.com
www.accp.com
一台主机如果有多个 IP 地址,可以设置每一个 IP 对应一个站点。主机安装多个网卡可以有多个 IP,这里采用虚拟 IP 的方式使主机有多个 IP。
(1)为服务器设置多个 IP 地址
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:1
[root@localhost network-scripts]# vim ifcfg-ens33:0
IPADDR=192.168.10.151
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=223.6.6.6
NAME=ens33:0
DEVICE=ens33:0
[root@localhost network-scripts]# vim ifcfg-ens33:1
IPADDR=192.168.10.152
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=223.6.6.6
NAME=ens33:1
DEVICE=ens33:1
[root@localhost network-scripts]# nmcli c reload
[root@localhost network-scripts]# nmcli c up ens33
[root@localhost network-scripts]# ip add
(2)修改 Nginx 的配置文件,使基于 IP 的虚拟主机生效
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 192.168.10.151:80;
server_name www.benet.com;
......
}
server {
listen 192.168.10.152:80;
server_name www.accp.com;
......
}
[root@localhost ~]# systemctl restart nginx
(3)访问两个ip网站,测试页面是否生效
(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
(3)分别访问 2 个端口地址
众所周知,LAMP 平台是目前应用最为广泛的网站服务器架构,其中 “A” 对应着 Web 服务软件 Apache。随着 Nginx 在企业中的使用越来越多,LNMP(或 LEMP)架构也越来越受到企业的青睐。
本案例也可以使用 rpm 包安装 mysql 服务
(1)编译安装 MySQL 服务
[root@www ~]# yum install -y autoconf
备注:
Autoconf 是一个用于生成可以自动地配置软件源代码包以适应多种 Unix 类系统的 shell 脚本的工具。
[root@localhost ~]# yum -y install ncurses-devel gcc-c++ perl-Module-Install cmake
[root@localhost ~]# tar -zxvf mysql-5.6.36.tar.gz
[root@localhost ~]# cd mysql-5.6.36/
[root@localhost mysql-5.6.36]# cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DSYSCONFDIR=/etc
[root@localhost mysql-5.6.36]# make && make install
(2)复制配置文件到 etc 下,并把 MySQL 添加到服务
[root@localhost mysql-5.6.36]# cp support-files/my-default.cnf /etc/my.cnf
[root@localhost mysql-5.6.36]# cp support-files/mysql.server /etc/init.d/mysqld
[root@localhost mysql-5.6.36]# chmod +x /etc/rc.d/init.d/mysqld
[root@localhost mysql-5.6.36]# chkconfig --add mysqld
[root@localhost mysql-5.6.36]# chkconfig mysqld on
(3)初始化数据库
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -M -s /sbin/nologin mysql -g mysql
[root@localhost ~]# chown -R mysql.mysql /usr/local/mysql
[root@localhost ~]# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
(3)启动 mysql,并设置密码
[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# mysqladmin -u root password '123.com'
(1)编译安装 PHP
[root@localhost ~]# yum -y install gd libxml2-devel libjpeg-devel libpng-devel
备注:
[root@localhost ~]#tar -zxvf php-5.5.38.tar.gz
如果 mysql 用源码包安装的:
[root@localhost ~]#cd php-5.5.38/
[root@localhost php-5.5.38]#./configure \
--prefix=/usr/local/php5 \
--with-gd \
--with-zlib \
--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-config-file-path=/usr/local/php5 \
--enable-mbstring \
--enable-fpm \
--with-jpeg-dir=/usr/lib
如果 mysql 用 yum 装的:
[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
注意:
(3)安装 ZendGuardLoader
[root@localhost ~]# tar -zxvf zend-loader-php5.5-linux-x86_64-update1.tar.gz
[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
添加下列内容:
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
zend_loader.enable=1
(1)启用 php - fpm 进程
[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]# vim 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 ~]# vim /lib/systemd/system/php-fpm.service
[Unit]
Description=The PHP FastCGI Process Manager
After=network.target
[Service]
Type=simple
PIDFile=/usr/local/php5/var/run/php-fpm.pid
ExecStart=/usr/local/php5/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php5/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start php-fpm
(2)配置 Nginx 支持 PHP 解析
调用本机的 php - fpm 进程
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
Server{
listen 80;
server_name www.bt.com;
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 页面访问测试
[root@localhost ~]# mkdir -p /var/www/html/
[root@localhost ~]# vim /var/www/html/test1.php
[root@localhost ~]# vim /var/www/html/test2.php
恭喜你,数据库连接成功啦!!!";
mysqli_close($link);
?>
bash
[root@localhost ~]# yum -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/
[root@localhost ~]# mysql -uroot -p
mysql>create database bbs;
mysql>grant all on bbs.* to runbbs@'127.0.0.1' identified by 'bbs123';
mysql>grant all on bbs.* to runbbs@'localhost' identified by 'bbs123';
访问服务器 URL 地址,对网站进行初始化
http://192.168.10.101/bbs/install/index.php