Nginx 服务介绍
Nginx是一款高性能、轻量级Web服务软件,
优点是:稳定性高、系统资源消耗低、对HTTP并发连接的处理能力高(单台物理服务器可支持30 000~50 000个并发请求)
Nginx 配置文件
#全局配置
#user nobody;
worker_processes 1; //工作进程数
#error_log logs/error.log; //错误日志文件存放位置
pid logs/nginx.pid; //PID文件的位置
#环境配置(I/O事件配置)
events {
use epoll; //使用epoll模型
worker_connections 4096; //每个进程的连接数
}
#HTTP配置
http {
......
# access_log logs/access.log main;
sendfile on;
......
keepalive_timeout 65;
server {
listen 80;
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 安装及运行控制
Nginx安装过程
- 安装包准备
官方源码包下载站点:http://nginx.org/en/download.html - 编译环境准备、依赖包安装
yum install -y gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel
openssl openssl-devel
- 解压缩
tar zxf nginx-1.12.2.tar.gz -C /usr/src/
- 创建 nginx 用户组
useradd -M -s /sbin/nologin nginx
- 编译安装nginx
cd /usr/src/
cd nginx-1.12.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx\
--with-http_stub_status_module
echo $?
0
make && make install
echo $?
0
- 优化路径(创建软链接)
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
- 启动Nginx
通过 /usr/local/sbin/nginx 启动
nginx
ss -lntp | grep nginx
LISTEN 0 128 *:80 *:*
users:(("nginx",pid=11754,fd=8),
("nginx",pid=11753,fd=8),("nginx",pid=11752,fd=8))
- nginx 运行控制
- nginx 启动
- killall -s HUB nginx 重载nginx
- killall -s QUIT nginx 优雅的关闭nginx
killall 命令
Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name)。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。
命令格式: killall [参数] [进程名]
命令参数:
-l 信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户
常用的信号:
HUP 1 终端断线
INT 2 中断(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 终止
KILL 9 强制终止
CONT 18 继续(与STOP相反, fg/bg命令)
STOP 19 暂停(同 Ctrl + Z)
- 还可以通过:nginx -s [参数] 实现服务的重载、关闭
nginx -c /path/to/nginx.conf // 以特定目录下的配置文件启动nginx:
nginx -s reload // 修改配置后重新加载生效
nginx -s reopen // 重新打开日志文件
nginx -s stop // 快速停止nginx
nginx -s quit // 完整有序的停止nginx
nginx -t // 测试当前配置文件是否正确
添加系统服务
将Nginx添加系统服务,通过systemctl命令控制Nginx服务
- 添加系统服务示例
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
#声明启动顺序,在network服务之后启动
After=network.target remote-fs.target nss-lookup.target
[Service]
#后台运行形式 forking:守护进程
Type=forking
#PID文件位置(记录nginx的进程号)
PIDFile=/usr/local/nginx/logs/nginx.pid
#指定nginx启动文件
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#根据PID热重载配置
ExecReload=/bin/kill -s HUP $MAINPID
#根据PID中止进程
ExecStop=/bin/kill -s QUIT $MAINPID
#为服务创建独立的运行空间
PrivateTmp=true
[Install]
WantedBy=multi-user.target
添加754权限
chmod 754 /lib/systemd/system/nginx.service
nginx -s quit //先退出
systemctl raedmon-reload //刷新后
systemctl start nginx.service //再用systemctl程序启动nginx服务
systemctl enable nginx.service //添加开机自启
- 添加系统服务示例:Nginx服务脚本
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)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
[root@localhost ~]# chmod +x /etc/init.d/nginx
[root@localhost ~]# chkconfig --add nginx
[root@localhost ~]#nginx -s quit
[root@localhost ~]# systemctl start nginx.service
[root@localhost ~]# systemctl status nginx.service
访问状态统计
Nginx内置了HTTP_STUB_STATUS状态统计模块,用来反馈当前的Web访问情况,配置编译参数时可添加–with-http_stub_status_module模块来启用此功能。
另外还需要修改配置文件:/usr/local/nginx/conf/nginx.conf
http {
server {
listen 80;
server_name www.fhy.com;
charset utf-8;
location / {
root html;
index index.html index.php;
}
location /status {
stub_status on;
access_log off;
}
}
}
重启服务,访问status页面
其中“Active connections”表示当前的活动连接数(1);“server accepts handled requests”表示已经处理的连接信息,三个数字依次表示已处理的连接数(6)、成功的TCP握手次数(6)、已处理的请求数(6)
Nginx访问控制
基于授权的访问控制
- 使用htpasswd命令生成用户密码认证文件
yum安装httpd-tools
[root@localhost ~]# htpasswd -c /usr/local/nginx/passwd.db admin
New password: //键入密码
Re-type new password:
Adding password for user test
[root@www nginx]# cat passwd.db
admin:$apr1$c2YTCr8e$z4IfvYCf50jR5fAZdfbhL0
[root@www nginx]#
- 修改密码文件的权限为400,将所有着改为nginx,设置nginx的运行用户能够读取。
-[root@www ~]# chmod 400 /usr/local/nginx/passwd.db [root@www ~]# chown nginx /usr/local/nginx/passwd.db [root@www ~]# ll -d /usr/local/nginx/passwd.db -r--------. 1 nginx root 42 9月 21 03:25 /usr/local/nginx/passwd.db
- 修改主配置文件对相应目录,添加认证配置项
vi /usr/local/nginx/conf/nginx.conf
auth_basic“secret”; //添加认证配置 - 检查语法,重启服务,访问测试
基于客户端的访问控制
- 基于客户端的访问控制是通过客户端IP地址,来决定是否允许对页面访问。
它的配置规则- deny IP/IP段:拒绝某个IP或IP段的客户端访问
- allow IP/IP段:允许某个IP或IP段的客户端访问
规则从上往下执行,如匹配则停止,不再往下匹配
- 配置步骤
- 修改配置文件,添加如下项
- 重启服务,访问网页
- 修改配置文件,添加如下项
Nginx虚拟主机
基于域名的虚拟主机构建
构建2个虚拟Web站点www.zzq.com,www.25zzq.com IP地址均为 192.168.137.102
- 修改Windows客户机的hosts文件
- 为各个网站准备网页文档和网页根目录
[root@www ~]# mkdir -p /var/www/html/zzq/
[root@www ~]# mkdir -p /var/www/html/25zzq/
[root@www ~]# echo zzq > /var/www/html/zzq/index.html
[root@www ~]# echo 25zzq > /var/www/html/25zzq/index.html
- 修改nginx配置文件,把配置文件中的server{}代码全部清掉,然后加入两个新的server{}段,对应到两个域名。
[root@www can]# vim /usr/local/nginx/conf/nginx.conf
…
server {
listen 80;
server_name www.zzq.com;
charset utf-8;
access_log logs/www.zzq.com.access.log;
location / {
root /var/www/html/zzq;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name www.25zzq.com;
charset utf-8;
access_log logs/www.25zzq.com.access.log;
location / {
root /var/www/html/25zzq;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
…
- 重启nginx服务
- 客户机验证
基于IP的虚拟主机构建
构建2个虚拟Web站点www.zzq.com,www.25zzq.com IP地址分别为 :192.168.137.102,192.168.137.103
在浏览器中访问这两个域名时,分别显示不同的内容
个域名时,分别显示不同的内容
和基于域名类似,将server{}字段中的servername分别改为IP地址的形式
server {
listen 192.168.137.102:80;
server_name 192.168.137.102:80;
......}
server {
listen 192.168.137.103:80;
server_name 192.168.137.103:80;
......}
基于端口号的虚拟主机构建
构建2个虚拟Web站点www.zzq.com,www.25zzq.com IP地址分别为 :192.168.137.102:80,192.168.137.102:8080
在浏览器中访问这两个域名时,分别显示不同的内容
和基于域名类似,将server{}字段中的servername分别改为IP地址:端口号的形式
server {
listen 192.168.137.102:80;
server_name 192.168.137.102:80;
…}
server {
listen 192.168.137.102:8080;
server_name 192.168.137.102:8080;
…}
LNMP架构部署
编译安装MySQL数据库
- 检查当前系统MySQL安装情况
为了避免发生端口冲突、程序冲突等现象,应先查询MySQL软件的安装情况。 - 安装ncurses-devel(字符处理库)依赖包
ncurses是字符终端下屏幕控制的基本库,在TTY下登录到主机上mysql需要的,所以依赖。
通过yum安装yum -y install ncurses-devel
- 编译安装cmake,mysql需要用cmake来编译
tar -xzf cmake-2.8.6.tar.gz
cd cmake-2.8.6
./configure
gmake && gmake install
- 配置mysql
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql //指定MySQL数据库的安装目录为/usr/local/mysql
-DSYSCONFDIR=/etc //指定初始化参数文件目录为/etc
-DDEFAULT_CHARSET=utf8 //指定默认使用的字符集编码为utf8国际通用编码
-DDEFAULT_COLLATION=utf8_general_ci //指定默认使用的字符集校对规则为utf8_general_ci (适用于UTF-8)
-DWITH_EXTRA_CHARSETS=all //指定额外支持的其他字符集编码
- 编译、安装
make && make install
-
安装后优化调整
- 创建运行用户
groupadd mysql //创建组 useradd -M -s /sbin/binnologin mysql -g mysql
- 对数据库目录进行权限设置
chown -R mysql:mysql /usr/local/mysql
- 建立配置文件
rm -rf /etc/my.cnf //删除原来的/etc/my.conf文件 cp support-files/my-default.cnf /etc/my.cnf //拷贝数据库样本文件
- 初始化数据库
/usr/local/mysql/scripts/mysql_install_db -- user=mysql --basedir=/usr/local/mysql -- datadir=/usr/local/mysql/data/ //以运行用户mysql的身份执行初始化脚本mysql_install_db,指定数据存放目录
- 设置环境变量
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile //方便在任何目录下使用MySQL命令,在/etc/profile设置环境变量 . /etc/profile //立即生效
-
添加系统服务
添加mysqld到系统服务:先将/support-files/mysql.server脚本文件拷贝到/etc/rc.d/init.d目录下,并改名为mysqld,然后设置可执权限,通过执行”chkconfig”命令将其添加为mysqld系统服务。
就可以直接通过systemctl(stop、start、restart)工具控制 mysqld数据库服务了。
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
- 运行mysql
systemctl start mysqld
MySQL服务器默认通过TCP 3306端口提供服务。通过编辑/etc/my.conf配置文件中[mysqld]配置段的”port=3306”行,可以更改监听端口
- 创建数据库用户
mysqladmin -u root -p password 123
mysql -u root -p
mysql>
安装php解析环境
- yum安装PHP的依赖包
yum install -y linpng libpng-devel pcre pcre-devel libxml2-devel libjpeg-devel
- 编译安装PHP
[root@www ~]# tar zxf php-5.5.38.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/php-5.5.38/
[root@www 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
[root@www php-5.5.38]# make && make install
- 复制模板文件作为PHP的主配置文件
[root@www php-5.5.38]#cp /usr/src/php-5.5.38/php.ini-development /usr/local/php5/php.ini
- 修改php.ini配置
default_charset = ”utf-8” | 设置默认的字符集 |
---|---|
file_upload = On | 允许通过PHP网页上传文件 |
upload_max_filesize = 2M | 允许上传的文件大小限制 |
max_file_uploads = 数量 | 允许上传文件数量 |
post_max_size = 8M | 每次通过表单post提交的数据量限制 |
short_open_tag = On | 允许识别PHP短语法标记,即<?...?> |
注:可以直接沿用默认配置,不做任何修改。
- 添加ZendGuardLoader优化模块
- 为了进一步提高PHP程序的执行效率,优化页面加载速度。
首先将准备好的ZendGuardLoader优化模块拷贝到/usr/local/php5/lib/php/目录
- 然后编译PHP配置文件:vi /usr/local/php5/php.ini
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
zend_loader.enable=1
//添加加载及启用ZendGuardLoader模块
- 为了进一步提高PHP程序的执行效率,优化页面加载速度。
配置Nginx支持PHP环境
- PHP-FPM模块配置
FPM(FastCGI Process Manger,FastCGI进程管理器)模块,用来对PHP解析实例进行管理和优化解析效率。-
复制模板文件php-fpm.conf.default作为PHP-FPM的配置文件
-
修改php-fpm.conf配置文件
[root@www etc]# grep -v "^;" php-fpm.conf | grep -v "^$" [global] pid = run/php-fpm.pid // [www] user = nginx group = nginx listen = 127.0.0.1:9000 pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 20 ```
-
启动PHP-FPM模块,进程使用9000端口
[root@www bin]# ln -s /usr/local/php5/bin/* /usr/local/bin/ //软链 [root@www bin]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/
-
修改Nginx的启动脚本,在Nginx启动时把PHP-FPM模块也同时启动。
#!/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/php-fpm.pid" case "$1" in start) $PROG $PROG_FPM ;; stop) kill -s QUIT $(cat $PIDF) killall $PROG_FPM ;; restart) $0 stop $0 start ;; reload) kill -s HUP $(cat $PIDF) ;; *) echo "Usage: $0 {start|stop|restart|reload}" esac
[root@www system]# chmod +x /etc/init.d/nginx [root@www system]# chkconfig --add nginx [root@www system]# nginx -s stop nginx: [alert] kill(7957, 15) failed (3: No such process) [root@www system]# systemctl start nginx [root@www system]# ps -ef | grep php-fpm root 43952 1 0 17:26 ? 00:00:00 php-fpm: master process (/usr/local/php5/etc/php-fpm.conf)
-
- LNMP架构协同测试(与apache相似)
- 测试PHP网页能否正确显示
- 测试PHP网页能否访问MySQL数据库