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

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](https://so.csdn.net/so/search?q=Nginx&spm=1001.2101.3001.7020 "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**** > > \ > phpinfo(); > > ?\> > \[root@localhost \~\]# ****vim /var/www/**** ****html**** ****/test**** ****2**** ****.php**** > > \ > $link=mysqli_connect('127.0.0.1','root','pwd123'); > > if($link) echo "\恭喜你,数据库连接成功啦!!!\"; > > 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 地址,对网站进行初始化

相关推荐
宁zz9 小时前
乌班图安装jenkins
运维·jenkins
大丈夫立于天地间9 小时前
ISIS协议中的数据库同步
运维·网络·信息与通信
rainFFrain10 小时前
单例模式与线程安全
linux·运维·服务器·vscode·单例模式
xujiangyan_11 小时前
nginx的反向代理和负载均衡
服务器·网络·nginx
@郭小茶12 小时前
docker-compose方式部署docker项目
运维·docker·容器
自由鬼12 小时前
开源虚拟化管理平台Proxmox VE部署超融合
linux·运维·服务器·开源·虚拟化·pve
电星托马斯13 小时前
Linux系统CentOS 6.3安装图文详解
linux·运维·服务器·程序人生·centos
啞謎专家13 小时前
CentOS中挂载新盘LVM指南:轻松扩展存储空间,解决磁盘容量不足问题
linux·运维·服务器
s_little_monster13 小时前
【Linux】进程信号的捕捉处理
linux·运维·服务器·经验分享·笔记·学习·学习方法
一大Cpp14 小时前
Ubuntu与本地用户交流是两种小方法
linux·运维·ubuntu