Nginx+虚拟主机+LNMP

Nginx

概述

一款高性能、轻量级Web服务软件,稳定性高,系统资源消耗低。对HTTP并发连接的处理能力高(能够处理高并发),单台物理服务器可支持30000~50000个并发请求。

工作原理

Nginx 本身做的工作实际很少,当它接到一个 HTTP 请求时, 它仅仅是通过查找配置文件将此次请求映射到一个 location block,而此 location 中所配 置的各个指令则会启动不同的模块去完成工作,因此模块可以看做 Nginx 真正的劳动工作者。
通常一个 location 中的指令会涉及一个 handler 模块和多个 filter 模块(当然,多个 location 可以复用同一个模块)。handler 模块负责处理请求,完成响应内容的生成,而 filter 模块对响应内容进行处理。 用户根据自己的需要所开发的模块都属于第三方模块。正是有了这么多模块的支撑, Nginx 的功能才会如此强大。

模块

种类包含
核心模块HTTP 模块、EVENT 模块和 MAIL 模块
基础模块HTTP Access 模块、HTTP FastCGI 模块、HTTP Proxy 模块和 HTTP Rewrite 模块
第三方模块HTTP Upstream Request Hash 模块、Notice 模块和 HTTP Access Key 模 块
模块功能
Handlers(处理器模块)此类模块直接处理请求,并进行输出内容和修改 headers 信息等操作。Handlers 处理器模块一般只能有一个
Filters(过滤器模块)此类模块主要对其他处理器模块输出的内容进行修改操作,最后由 Nginx 输出
Proxies(代理类模块)此类模块是 Nginx 的 HTTP Upstream 之类的模块,这些模块主要与后端一些服务比如 FastCGI 等进行交互,实现服务代理和负载均衡等功能

安装nginx

将后续操作需要的压缩包一起拉到目录下。
在这里插入图片描述

systemctl stop firewalld
setenforce 0
yum -y install pcre-devel zlib-devel
#pcre-devel 是perl语言的正则表达式库,zlib-devel 软件包的开发包,一个函数库,库里面包括头文件,静态库甚至源码等资源

useradd -M -s /sbin/nologin nginx  # 创建不可登录,不带宿主的用户nginx
tar zxvf nginx-1.12.2.tar.gz 
cd nginx-1.12.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
# --user=nginx  --group=nginx:指定其运行时的账户与组 --with-http_stub_status_module:将状态模块启用

make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #创链接
nginx -t   #语法检查 
nginx    #启动
netstat -anpt | grep nginx   #查看服务

在这里插入图片描述
PS:

killall -1 nginx     #服务重启
killall -3 nginx     #服务关闭
vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: 35 80 20  设置级别35,启动顺序80开启,关闭顺序20关闭
#description: Nginx HTTP Server  
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
     start)
     $PROG   #启动调用文件
     ;;
     stop)
     kill -s QUIT $(cat $PIDF) #服务退出,退出时加上进程文件号
     ;;
     reload)
     kill -s HUP $(cat $PIDF)  #平滑过渡
     ;;
     restart)
     $0 stop   先关闭  $0#表示当前执行的脚本或程序名称
     $0 start  后开启
     ;; 
     *)  #如果输入错误,提示可以支持的格式
     echo "Usage: $0 {start|stop|reload|restart}"
     exit 1    #退出代码
esac
exit 0   #退出脚本

chmod +x /etc/init.d/nginx 
chkconfig --add nginx
chkconfig --list

在这里插入图片描述

ln -s /usr/local/nginx/conf/nginx.conf /etc/   #链接到/etc下,方便管理
vi /etc/nginx.conf 
user nginx nginx  #删除注释启用
worker_processes   4   #工作进程号改为4
error_log  logs/error.log  info;   #删除注释启用
events {       
        use epoll;    #支持高并发
        worker_connections    4096;  #修改并发连接数4096
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';#记录日志三个注释删除
charset utf-8   #修改成支持中文字符集utf-8
access_log  logs/aa.com.access.log  main;  #删除注释,模块下启用访问日志功能改名aa.com


ulimit -n 65535 >> /etc/rc.local  #修改资源数
nginx -t

在这里插入图片描述
开启统计模块

vi /etc/nginx.conf 
location行下添加
location ~ /status {             #匹配项只要URL路径中出现/status就会定位到该模块
            stub_status on;       #功能开启
            access_log off;        #不记录日志
}   

systemctl stop nginx
systemctl start nginx

在这里插入图片描述
在这里插入图片描述
注意:开启统计模块时,配置文件不能用空格移动位置,要用Tab键,不然会404。

nginx status含义
active connections活跃的连接数量
server accepts handled requests总共处理了n个连接,成功创建n次握手,总共处理了n个请求
reading读取客户端的连接数
writing响应数据到客户端的数量
waiting开启keep-alive的情况下,这个值等于active (reading+writing) 意思就是Nginx已经处理完正在等候下一次请求指令的驻留连接

查看日志文件

cd /usr/local/nginx/logs/
ll
cat aa.com.access.log | wc -l

在这里插入图片描述

配置验证功能

yum -y install httpd-tools    #支持passwd命令
htpasswd -c /usr/local/nginx/passwd.db lb    #lb为用户名
chown nginx /usr/local/nginx/passwd.db
nginx -t
systemctl stop nginx
systemctl start nginx

在这里插入图片描述
拒绝20.0.0.10访问

vi /etc/nginx.conf 
添加        deny 20.0.0.1/32;   #先拒绝
               allow all;        #后允许           


systemctl stop nginx
systemctl start nginx
netstat -anpt | grep nginx

在这里插入图片描述
nginx不同于apache,验证管理是按照顺序进行执行的。

配置虚拟主机功能

删除之前验证功能配置

基于域名

vi /etc/nginx.conf   #修改
server_name  www.aa.com;
root   /var/www/aa;
http模块中添加
server {
         listen  80;                                       #监听端口
         server_name www.11.com;           #主机名
         charset utf-8;                                  #字符集
         access_log logs/11.com.access.log;  #访问日志文件路径
         location / {                                           #站点目录
             root /var/www/11;                            # 根
             index index.html index.htm;            #主页
         }
         error_page   500 502 503 504  /50x.html;    #错误日志(出现500 502 503 504报错,引用50x.html文件)
         location = /50x.html {                                    #文件名
            root   html;                                                 #文件路径
         }
    } 

mkdir -p /var/www/aa
mkdir -p /var/www/11
echo "<h1>this is aa.</h1>" > /var/www/aa/index.html
echo "<h1>this is 11.</h1>" > /var/www/11/index.html
vi /etc/hosts  #添加
20.0.0.10   www.aa.com    www.11.com

在这里插入图片描述

基于ip

ifconfig ens33:1 192.168.6.6/24
ifconfig
vi /etc/nginx.conf

nginx -t
systemctl stop nginx
systemctl start nginx
netstat -anpt | grep nginx

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

基于端口

vi /etc/nginx.conf  #修改端口

在这里插入图片描述
其他和上面一样,检查语法错误,重启服务,查看服务起了没有,验证。
在这里插入图片描述

LNMP架构

安装mysql

tar zxvf mysql-boost-5.7.20.tar.gz
yum -y install ncurses ncurses-devel bison cmake    #ncurses ncurses-devel:字符终端下屏幕控制的基本库,bison :自动生成语法分析器程序,cmake :跨平台的安装编译工具
useradd -s /sbin/nologin mysql    #建立不可登录用户mysql

cd mysql-5.7.20/    #进入数据库
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1
make && make install   #编译安装,时间长

chown -R mysql:mysql /usr/local/mysql/     #添加服务属主,属组
vi /etc/my.cnf   #全删,重新添加
[client]       #客户端
port = 3306    #访问端口   
default-character-set = utf8      #默认字符设定
socket = /usr/local/mysql/mysql.sock     #套接字路径,需与数据库套接字路径一致,否则无法访问
[mysql]       #运行用户
port = 3306
default-character-set = utf8
socket = /usr/local/mysql/mysql.sock
[mysqld]       #程序
user = mysql       #运行用户
basedir = /usr/local/mysql      #基本路径,根目录
datadir = /usr/local/mysql/data     #用户目录
port = 3306       #运行端口
character_set_server = utf8      #服务器设定默认字符
socket = /usr/local/mysql/mysql.sock     #运行时进程文件
pid-file = /usr/local/mysql/mysql.pid     #套接字路径
server-id = 1      #每个数据库的id必须不一样
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

chown mysql:mysql /etc/my.cnf
echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile    #复制环境变量到开机启动
echo 'export PATH' >> /etc/profile    #设置全局变量
tail -5 /etc/profile    #检查
source /etc/profile    #立即执行变量
echo $PATH      #检查环境变量
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data       #初始化
cd /usr/local/mysql/
cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system  #拷贝mysqld.service文件
systemctl daemon-reload    #守护进程重新加载
systemctl start mysqld      #开启服务
cd
netstat -anpt | grep 3306     #检查端口3306有没有开
systemctl enable mysqld    #自启动

mysql     #登录
mysql> set password for root@localhost = password('123123');      #设密码
mysql> exit    #退出
mysql -uroot -p123123     带密码登陆 
mysql>     #成功登陆

在这里插入图片描述在这里插入图片描述
注:要进到/usr/local/mysql/目录下才能拷贝。

安装配置php

tar jxvf php-7.1.10.tar.bz2
yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel curl curl-devel openssl openssl-devel      #libjpeg libjpeg-devel :jpeg图像压缩库,libpng libpng-devel :png图像压缩库,freetype freetype-devel :字体引擎,libxml2 libxml2-devel :解析Xml程序库,zlib zlib-devel :数据压缩,curl curl-devel :传输工具,openssl openssl-devel :安全通信
cd php-7.1.10/
./configure --prefix=/usr/local/php --with-mysql-sock=/usr/local/mysql/mysql.sock --with-mysqli --with-zlib --with-curl --with-gb --with-jpeg-dir --with-png-dir --with-freetype-dir --with-openssl --enable-fpm --enable-mbstring --enable-xml --enable-session --enable-ftp --enable-pdo --enable-tokenizer --enable-zip
make && make install

cp php.ini-development /usr/local/php/lib/php.ini   #拷贝扩展配置文件到php库文件下,重命名php.ini
vi /usr/local/php/lib/php.ini     #编辑配置文件,修改
date.timezone = Asia/Shanghai  #去掉注释,添加时区为上海,939行
mysqli.default_socket = /usr/local/mysql/mysql.sock   #添加套接字mysql路径,1170行

/usr/local/php/bin/php -m | wc -l

在这里插入图片描述

配置及优化FPM模块

cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf
cd /usr/local/php/etc/
vi php-fpm.conf
pid = run/php-fpm.pid  #去掉注释

/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
netstat -anpt | grep 9000
ln -s /usr/local/php/bin/* /usr/bin    #让/usr/local/php/bin/下生成的所有命令都链接到/usr/bin下

在这里插入图片描述

让nginx支持PHP功能

vi /etc/nginx.conf
修改$document_root  (调用变量)
一大段的注释都要去掉

nginx -t
systemctl stop nginx
systemctl start nginx

在这里插入图片描述

vi /usr/local/nginx/html/index.php
<?php
phpinfo();
?>

浏览器上访问
在这里插入图片描述

测试数据库工作

mysql -uroot -p123123     #登录
mysql> create database bbs;  #创建数据库
mysql> grant all privileges on bbs.* to 'bbsuser'@'localhost' identified by 'admin123';    #本地授权
mysql> grant all privileges on bbs.* to 'bbsuser'@'%' identified by 'admin123';       #远程授权
mysql> flush privileges;    #刷新
mysql> exit 

vi /usr/local/nginx/html/index.php
<?php #变量  连接信息    本机地址      数据库登录名 登录密码
$link=mysqli_connect ('20.0.0.11','bbsuser','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>

在这里插入图片描述

部署Discuz 社区论坛

unzip Discuz_X3.4_SC_UTF8.zip 
cd dir_SC_UTF8/
cp -r upload/ /usr/local/nginx/html/bbs
cd /usr/local/nginx/html/bbs/
chown -R root.nginx ./config/
chown -R root.nginx ./data/
chown -R root.nginx ./uc_client/
chown -R root.nginx ./uc_server/
chmod -R 777 ./config/
chmod -R 777 ./data/
chmod -R 777 ./uc_client/
chmod -R 777 ./uc_server/

访问http://20.0.0.10/bbs/install/index.php
在这里插入图片描述
安装完成,访问http://20.0.0.10/bbs/index.php
在这里插入图片描述

设置安装目录仅自己可见

ll
mv install/ install.lock
chmod 600 install.lock/

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值