Nginx (发音为[engine x])专为性能优化而开发
最知名的优点
安装文件可以从官方网站下载
安装支持软件
Nginx 的配置及运行需要软件包的支持
因此应预先安装这些软件的开发包(devel)以便提供相应的库和头文件,确保Nginx的安装顺利完成。
[root@localhost ~]# yum -y install pcre-devel zlib-devel gcc++ gcc
建议为其创建专门的用户账号,以便更准确
创建一个名为nginx 的用户,不建立宿主文件夹,也禁止登录到Shel 环境
[root@localhost ~]# useradd -M -s /sbin/nologin nginx
- [root@localhost ~]# tar zxf nginx-1.12.0.tar.gz
- [root@localhost ~# cd nginx-1.12.0
- [root@localhost nginx-1.12.0]#./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http stub status module
- [root@localhost nginx-1.12.0]# make && make install
为了使 Nginx 服务器的运行更加方便,可以为主程序 nginx 创建链接文件
以便管理员直接执行“nginx”命令就可以调用 Nginx 的主程序
- [root@locahostnginx-1.12.0]#In-s /usr/localnginx/sbin/nginx/usr/local/sbin/
- [root@localhost nginx-1.12.0]#ls -l /usr/local/sbin/nginx
- Irwxrwxrwx 1 root root 27 5月16 16:50 /usr/local/sbin/nginx->/usr/localinginx/sbin/nginx
-
- [root@localhost ~]# nginx -t
- nginx: the configuration file /usr/local/nginx/confinginx.conf syntax is ok
- nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
启动、停止 Nginx
[root@local ~]# nginx
检查 Nginx 程序的监听状态,或者在浏览器中访问此Web 服务(默认页面将显示“Welcome to nginx!”),可以确认 Nginx 服务是否正常运行。
- [root@localhost ~]# netstat -anpt | grep nginx
- tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7180/nginx:master
- [root@localhost ~]# yum -y install elinks
- //使用 elinks 浏览器
- [root@localhost ~]# elinks http://localhost
- //显示“Welcome to nginx!"页面,表明 Nginx 服务已经正常运行
主程序 Nginx 支持标准的进程信号
通过 ki 或 kilall 命令发送
使用 killall 命令,重载配置、停止服务的操作分别如下所示(通过“-s”选项指定信号种类)。
- //选项 -S HUP 等同于 -1
- [root@localhost ~]# killall -s HUP nginx
- //选项 -S QUIT 等同于 -3
- [root@localhost ~]# killall -s QUIT nginx
添加 Nginx 系统服务
使 Nginx 服务的启动、停止、重载等操作更加方便,可以编写 Nginx 服务脚本,并使用 chkconfig 和 systemctl 工具来进行管理,也更加符合 CentOS7.3 系统的管理习惯。
- [root@localhost ~]# vim /etc/init.d/nginx#!
- /bin/bash
- #chkconfig:-99 20
- #description:Nginx Service Control Script
- PROG="/usr/local/nginxsbin/nginx"
- PIDF="/usr/local/nginx/logs/nginx.pid"
- case "$1" in
- start)
- $PROG
- ;;
- stop)
- kill -s QUIT $(cat $PIDF)
- restart)
- $0 stop
- $0 start
- reload)
- kill -s HUP $(cat $PIDF)
- ;;
- *)
- echo "Usage: $0 {start|stoplrestart|reload}'
- exit 1
- esac
- exit 0
- [root@localhost ~]# chmod +x /etc/init.dinginx
- [root@localhost ~# chkconfig --add nginx
- [root@localhost ~]# systemctl status nginx
- nginx.service -SYSV: Nginx Service Control Script
- Loaded: loaded (/etc/rc.d/init.d/nginx; bad; vendor preset: disabled)
- Active: inactive (dead)
- Docs: man:systemd-sysv-generator(8)
Nginx 服务器的主配置文件/usr/local/nginx/confnginx.conf中包括三大块内容
配置语句的格式为“关键字 值;”(末尾以分号表示结束),以“#”开始的部分表示注释
全局配置部分包括Nginx 服务
- //运行用户
- #user nobody;
- //工作进程数量
- worker_processes 1;
- //错误日志文件的位置
- #error_log logs/error.log;
- //PID 文件的位置
- #pid logs/nginx.pid;
worker_processes 表示工作进程的数量。如果网站访问量需求并不大,一般设为1就够用了。
使用“events {}”界定标记
2.6及以上版本的内核,建议用 epoll模型提高性能
每个进程的连接数根据实际需要来定,一般在 10000 以下(默认为 1024)。
- events {
- //使用 epoll 模型
- use epoll;
- //每进程处理 4096个连接
- worker connections 4096;
- }
使用“http {}”界定标记,包括
其中大部分配置语句都包含在子界定标记“server {}”内
- http {
- include mime.types;
- default type application/octet-stream,
- log_format main '$remote addr-$remote user I$time local] "$request"'
- '$status $body bytes sent "$http referer"'
- '$http user agent""$http x forwarded for"';
- //访问日志位置
- access_log logs/access.og main;
- //支持文件发送(下载)
- sendfile on;
- #tcp nopush on;
- #keepalive timeout 0;
- //连接保持超时
- keepalive timeout 65;
- #gzip on;
- //Web 服务的监听配置
- server {
- //监听地址及端口
- listen 80;
- //网站名称(FQDN)
- server name:www.bt.com;
- //网页的默认字符集
- charset utf-8;
- //根目录配置
- location /{
- //网站根目录的位置
- root html;
- //默认首页(索引页)
- index index.html index.php;
- }
- //内部错误的反馈页面
- error_page 500 502 503 504 /50x.html;
- //错误页面配置
- location = /50x.html{
- root html;
- }
- }
- }
Nginx 内置了 HTTP_STUB STATUS 状态统计模块,用来反馈当前的 Web 访问情况。
配置编译参数时可添加--with-http_stub_status_module 来启用此模块支持,可以使用命令/usr/local/nginx/sbin/nginx - 査看已安装的 Nginx 是否包含 HTTP STUB STATUS 模块。
要使用 Nginx 的状态统计功能,除了启用内建模块以外,还需要修改 nginx.conf配置文件,指定访问位置并添加 stub status 配置代码
- [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
-
- http {
- server {
- listen 80;
- server_name localhost;
- charset utf-8;
- location / {
- root html;
- index index.html index.htm;
- }
- location /status {
- stub_status on;
- access_log off;
- }
- }
- }
[root@localhost ~]# systemctl restart nginx
新的配置生效以后,在浏览器中访问 Nginx 服务器的/status 网站位置,可以看到当前的状态统计信息

概括为几个步骤
使用 htpasswd 生成用户认证文件,如果没有该命令,可使用 yum 安装 httpd-tools软件包
[root@localhost ~]# yum -y install httpd-tools
注:httpd-tools提供了htpasswd命令
- [root@localhost ~]# htpasswd -c /usr/local/nginx/passwd.db test
- root@localhost ~]# cat /usr/local/nginx/passwd.db
- New password:
- Re-type new password:Adding password for user test
- [root@localhost ~]# cat /usr/local/nginx/passwd.db
- test:$apr1$x.UaSXIM$RRLa2KJcKwsGBVsikGcrR/
修改密码文件权限为 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
- -r-------- 1 nginx root 43 5月 16 22:26 /usr/local/nginx/passwd.db
修改主配置文件 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;
- }
检测语法、重启服务
- [root@localhost ~]# nginx -t
- nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
- nginx: configuration file /usr/local/nginxconf/nginx.conf test is successful
- [root@localhost ~]# systemctl restart nginx
用浏览器访问网址,检验控制效果

规则
修改主配置文件 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;
- }
重启服务器访问网址,页面已经访问不到

提示:将参数还原
- 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;
- }
也可以配置多种类型的虚拟主机
修改hosts 文件,加入www.benet.com 和 www.accp.com 这两个域名
- 192.168.10.101 www.benet.com
- 192.168.10.101 www.accp.com
准备各个网站的目录和测试首页
- [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/accp/index.html
修改配置文件
- [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
-
- //加入 www.benet.com 对应的站点
- server {
- //监听地址
- listen 80;
- server_name www.benet.com;
- //日志文件
- access_log logs/www.benet.com.access.log;
- charset utf-8;
- location / {
- //www.benet.com的工作目录
- root /var/www/html/benet;
- index index.html index.htm;
- }
-
- error_page 500 502 503 504 /50x.html;
- location = 50x.html {
- root html;
- }
- }
-
- //加入 www.accp.com
- server {
- //监听地址
- listen 80;
- server_name www.accp.com;
- //日志文件
- access_log logs/www.accp.com.access.log;
- charset utf-8;
- location / {
- //www.accp.com的工作目录
- 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
- nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
- nginx: configuration file /usr/local/nginx/confinginx.conf test is successful
- [root@localhost ~]# systemctl restart nginx
测试


为服务器设置多个IP地址
- root@www conf# ip addr
- //省略内容
- inet 192.168.9.158/24 brd 192.168.9.255 scope global dynamic ens33
- /省略内容
再配置一个虚拟IP为192.168.9.110
- [root@www conf# ifconfig ens33:0 192.168.9.110
- [root@www conf# ip addr
- //省略内容
- inet 192.168.9.158/24 brd 192.168.9.255 scope global dynamic ens33
- valid_lft 7178sec preferred lft 7178sec
- inet 192.168.9.110/24 brd 192.168.9.255 scope global secondary ens33:0
- //省略内容
修改 Nginx的配置文件,使基于IP 的虚拟主机生效
- root@localhost~# vim /usr/local/nginx/confinginx.conf
- server {
- //监听 192.168.9.158
- listen192.168.9.158:80;
- server_name 192.168.9.158:80:
- //省略内容
- }
-
- server {
- //监听 192.168.9.110
- listen 192.168.9.110:80;
- server name192.168.9.110:80;
- //省略内容
- }
重启服务
[root@localhost ~]# systemctl restart nginx
浏览器访问2个IP地址,查看是否访问到不同的页面

选择系统中不使用的端口,多个端口映射到同一 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
检测端口是否运行正常
- [root@localhost ~]# netstat -anpt | grep nginx
- tcp 0 0 192.168.9.158:66660.0.0.0:* LISTEN 3838/nginx: master
- tcp 0 0 192.168.9.158:88880.0.0.0:* LISTEN 3838/nginx: master
分别访问 2 个端口地址

恢复前面做得快照,继续做后面得实验
编译安装 MySQL 服务
[root@www ~]# yum install -y autoconf
注:初始化mysql需要autoconf,它是自动化配置脚本生成工具,安装自动化脚本生成工具
[root@localhost ~]# yum -y install ncurses-devel gcc-c++ perl-Module-Install cmake
备注:
ncurses是字符终端下屏幕控制的基本库,大多数的 Linux 实用程序仅仅只在屏幕的底部滚动文本。
curses 是一个旧的 Unix 库,它可以在文本终端界面控制光标。curses 的名称就来自于术语 “ 光标控制(cursor control)”。
- [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
注:
CMake是一个跨平台的安装工具,可以用简单的语句来描述所有平台的安装(编译过程)。
-DDEFAULT_COLLATION:用于指定数据集如何排序,以及字符串的比对规则
常用的编译工具有cmake和configure。
./configure是用来检测你的安装平台的目标特征的
make是用来编译的,它从Makefile中读取指令,然后编译。
make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置
复制配置文件到/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
- [root@localhost mysql-5.6.36]# echo "PATH=$PATH:/usr/local/mysql/bin">> /etc/profile
- [root@localhost mysql-5.6.36]# . /etc/profile
初始化数据库
- [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
启动 mysql,并设置密码
- [root@localhost ~]# systemctl start mysqld
- [root@localhost ~]# mysqladmin -u root password '123.com'
新版本PHP(如 5.5 版本)已经自带FPM(FastCGl Process Manager,FastCGl进程管理器)模块,用来对 PHP 解析实例进行
单服务器的LNMP 架构通常使用这种方式,配置 PHP 编译选项时应添加""--enable-fpm”"以启用此模块
[root@localhost ~]# yum -y install gd libxml2-devel libjpeg-devel libpng-devel
备注:
- [root@localhost ~]#tar -zxvf php-5.5.38.tar.gz
- [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
备注:如果使用yum安装mariadb数据库,则配置参数
- [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
备注:可简化参数为
- ./configure \
-
- --prefix=/usr/local/php5 \
-
- --with-mysql=mysqlnd \
-
- --with-mysqli=mysqlnd \
-
- --with-config-file-path=/usr/local/php5 \
-
- --enable-mbstring \
-
- --enable-fpm
注:
--with-mysqli=mysqlnd需要用ip地址的方式连接数据库,既可以是php和mysql装在同一个服务器,也可以装在不同的服务器
--with-mysqli=/usr/bin/mysql_config需要用localhost连接数据库,只能用于本地连接,也就是php和mysql装在同一个服务器上
[root@localhost php-5.5.38]# make && make install
安装后调整
- [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/
安装 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
Nginx 解析 PHP 网页有两种方法可以选择
启用 php-fpm 进程
需要先启动 php-fpm 进程,以便监听 php 解析请求
- [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 etc]# vim /etc/init.d/nginx
- #!/bin/bash
- #chkconfig: - 99 20
- #description:Nginx Service Control Script
- PROG="/usr/local/nginx/sbin/nginx"
- PIDF="/usr/local/nginx/logs/nginx.pid"
- PROG_FPM="/usr/local/sbin/php-fpm"
- PIDF_FPM="/usr/local/php5/var/run/php-fpm.pid"
-
- case "$1" in
- start)
- $PROG
- $PROG_FPM
- ;;
- stop)
- pkill nginx
- pkill php-fpm
- ;;
- restart)
- $0 stop
- $0 start
- ;;
- reload)
- kill -s HUP $(cat $PIDF)
- kill -s HUP $(cat $PIDF_FPM)
- ;;
- *)
- echo "Usage: $0 {start|stop|restart|reload}"
- exit 1
- esac
- exit 0
- [root@localhost ~]# systemctl daemon-reload
- [root@localhost ~]# systemctl restart nginx
配置 Nginx 支持 PHP 解析
第一种方法:转给其他 Web 服务器处理
- [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
-
- Server{
- root /var/www/kgc/bbs;
- location ~ \.php$ {
- proxy_pass http://192.168.10.101:80;
- }
- }
第二种方法:调用本机的 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;
- }
- }
备注:
Nginx 与 php-fpm 通信过程是通过 nginx 的 fastcgi 模块来处理的,即 fastcgi 模块将来自客户端的关于 php 文件的请求转发给 php-fpm 来处理
PHP 页面访问测试
[root@localhost ~]# mkdir -p /var/www/html/
- [root@localhost ~]# vim /var/www/html/test1.php
-
- phpinfo();
- ?>
- [root@localhost ~]# vim /var/www/html/test2.php
-
- $link=mysqli_connect('127.0.0.1','root','pwd123');
- if($link) echo "
恭喜你,数据库连接成功啦!!!
"; - mysqli_close($link);
- ?>

- [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 地址,对网站进行初始化

确保系统环境、目前权限、缓存可写性等检测通过,否则安装将无法继续

访问 Web 应用系统


小阿轩yx-Nginx 网站服务