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 zx v f 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://localhos t

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段:拒绝某个IP或IP段的客户端访问。

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

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

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.comwww.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-devel:libxml是一个用来解析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。

(3)PHP 页面访问测试

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

root@localhost \~# vim /var/www/ html /test 1 .php

<?php

phpinfo();

?>

root@localhost \~# vim /var/www/ html /test 2 .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 地址,对网站进行初始化

相关推荐
XIAOHEZIcode5 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户03284722207021 小时前
如何搭建本地yum源(上)
运维
ping某2 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉4 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造