Nginx网站服务

一:Nginx 服务基础

1.1:Nginx 1.12 安装及运行控制

1:编译安装 Nginx

  1. 安装支持软件

[root@localhost ~]# systemctl stop firewalld

[root@localhost ~]# systemctl disable firewalld

[root@localhost ~]# setenforce 0

[root@localhost ~]# yum -y install pcre-devel zlib-devel gcc* openssl-devel

2)创建运行用户、组

[root@localhost ~]# useradd -M -s /sbin/nologin nginx

3)编译安装 Nginx

[root@localhost ~]# tar zxvf 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_ssl_module \

--with-http_stub_status_module

[root@localhost nginx-1.12.0]# make&&make install

[root@localhost nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

[root@localhost nginx-1.12.0]# ls -l /usr/local/sbin/nginx

2:Nginx 的运行控制

1)检查配置文件

[root@localhost ~]# nginx -t

2)启动、停止 Nginx

[root@localhost ~]# nginx

[root@localhost ~]# netstat -anpt | grep nginx

[root@localhost ~]# yum -y install elinks

[root@localhost ~]# elinks http://localhost

[root@localhost ~]# yum install -y psmisc

备注:

psmisc提供killall命令

[root@localhost ~]# killall -s HUP nginx

//重载,选项 -s HUP 等同于 -1 :killall -1 nginx

[root@localhost ~]# killall -s QUIT nginx

//关闭,选项 -s QUIT 等同于 -3:killall -3 nginx

(3)添加 Nginx 系统服务

[root@localhost ~]# 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"

case "$1" in

start)

$PROG

;;

stop)

pkill nginx 

;;

restart)

$0 stop

$0 start

;;

reload)

kill -s HUP $(cat $PIDF)

;;

*)

echo "Usage: $0 {start|stop|restart|reload}"

exit 1

esac

exit 0

[root@localhost ~]# chmod +x /etc/init.d/nginx

[root@localhost ~]# chkconfig --add nginx

[root@localhost ~]# systemctl status nginx

1.2:配置文件 nginx.conf

1:全局配置

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

#user nobody;       ##运行用户

worker_processes 1; ##工作进程数量

#error_log logs/error.log; ##错误日志文件的位置

#pid logs/nginx.pid; ##PID 文件的位置

2:I/O 事件配置

events {

use epoll; ##使用 epoll 模型

worker_connections 4096;      ##每进程处理 4096 个连接

}

备注:

epoll模式能够提高并发连接,并支持非活跃连接

3:HTTP 配置

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

http {

    include       mime.types;

    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;

    #tcp_nopush     on;

    #keepalive_timeout  0;

    keepalive_timeout  65;

    #gzip  on;

    server {

        listen       80;

        server_name  www.benet.com;

        charset utf-8;

        #access_log  logs/host.access.log  main;

        location / {

            root   html;

            index  index.html index.htm;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

}

}

4:访问状态统计

[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 访问控制

2.1:基于授权的访问控制

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

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

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

[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

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

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;

        }

4)检测语法、重启服务

[root@localhost ~]# nginx -t

[root@localhost ~]# systemctl restart nginx

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

2.2:基于客户端的访问控制

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

Ø deny IP/IP段:拒绝某个IPIP段的客户端访问。

Ø allow IP/IP段:允许某个IPIP段的客户端访问。

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

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

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 虚拟主机

提示:将参数还原

        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;

        }

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 ~]# echo "www.benet.com">> /var/www/html/benet/index.html

[root@localhost ~]# echo "www.accp.com">>/var/www/html/accp/index.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

  1. 测试

2:基于 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]# systemctl restart network

[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网站,测试页面是否生效

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

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

四:LNMP 架构部署及应用

恢复前面做得快照,继续做后面得实验

4.1:构建 LNMP 网站平台

1:安装 MySQL 服务

1)编译安装 MySQL 服务

[root@www ~]# yum install -y autoconf

备注:

初始化mysql需要autoconf,它是自动化配置脚本生成工具,安装自动化脚本生成工具

[root@localhost ~]# yum -y install ncurses-devel gcc-c++ perl-Module-Install cmake

备注:

ncurses是字符终端下屏幕控制的基本库,大多数的 Linux 实用程序仅仅只在屏幕的底部滚动文本。如果你想在屏幕中放置你的文本,例如一个游戏或者一个数据展示,你可以试试 ncurses。

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。一般来说,程序安装既支持cmake安装也支持configure安装,因此解压后的程序包会包含cmake文件和configure文件。我们可以选择其中之一进行安装。cmke相对于configure来说编译更智能,可自动搜索文件夹下所包含的所有编译文件进行编译,但对于我这样的初学者感受不是很明显。使用其中一种方法编译失败时,可以尝试用另一种方法。

./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。这一步一般用来生成 Makefile,为下一步的编译做准备

make是用来编译的,它从Makefile中读取指令,然后编译。

make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。


 

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

[root@localhost mysql-5.6.36]# echo "PATH=$PATH:/usr/local/mysql/bin">> /etc/profile

[root@localhost mysql-5.6.36]# . /etc/profile

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'

2:安装 PHP 解析环境

1)编译安装 PHP

[root@localhost ~]# yum -y install gd libxml2-devel libjpeg-devel libpng-devel

备注:

  • libxml2-devellibxml是一个用来解析XML文档的函数库
  • libjpeg-devel  #是一个完全用C语言编写的库,包含了被广泛使用的JPEG解码、JPEG编码和其他的JPEG功能的实现  
  • libpng-devel   #libpng 是一套免费的、公开源代码的程序库,支持对 PNG 图形文件的创建、读写等操作  
  • 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.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装在同一个服务器,也可以装在不同的服务器。用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)安装后调整

[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

[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

3:配置 Nginx 支持 PHP 环境

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 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

2)配置 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 来处理。既然是转发请求,那么必须要遵循一定的协议,也就是 fastcgi.conf 所规定的协议了。

原本只有fastcgi_params文件,fastcgi.conf是nginx 0.8.30 才引入的。主要为是解决以下问题:

原本Nginx只有fastcgi_params,后来发现很多人在定义SCRIPT_FILENAME时使用了硬编码的方式。

例如,fastcgi_param  SCRIPT_FILENAME  /var/www/foo$fastcgi_script_name。

于是为了规范用法便引入了fastcgi.conf。

3PHP 页面访问测试

[root@localhost ~]# mkdir -p /var/www/html/

[root@localhost ~]# vim /var/www/html/test1.php

<?php

phpinfo();

?>

[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.2:在 LNMP 平台中部署 Web 应用

1:下载并部署程序代码

[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/

2:创建数据库

[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';

3:安装 Web 应用

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

  • 14
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值