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

相关推荐
一心0921 小时前
ubuntu 20.04.6 sudo 源码包在线升级到1.9.17p1
运维·ubuntu·sudo·漏洞升级
好好学习啊天天向上1 小时前
世上最全:ubuntu 上及天河超算上源码编译llvm遇到的坑,cmake,ninja完整过程
linux·运维·ubuntu·自动性能优化
你想考研啊2 小时前
三、jenkins使用tomcat部署项目
运维·tomcat·jenkins
代码老y2 小时前
Docker:容器化技术的基石与实践指南
运维·docker·容器
典学长编程3 小时前
Linux操作系统从入门到精通!第二天(命令行)
linux·运维·chrome
DuelCode3 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
你想考研啊5 小时前
四、jenkins自动构建和设置邮箱
运维·jenkins
Code blocks5 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins
饥饿的半导体6 小时前
Linux快速入门
linux·运维
还是奇怪8 小时前
Linux - 安全排查 2
linux·运维·安全