Nginx服务基础
在各种网站服务器软件中,除了Appche HTTP Server 外,还有一款轻量级的HTTP服务器软件----Nginx,由俄罗斯的lgor Sysoev 开发,其稳定,高效的特性逐渐被越来越多的用户认可,本章将讲解nginx服务的基本构建,访问控制方式,虚拟主机的搭建,还有应用广泛的LNMP 架构服务器的部署方式,并对 PHP_FPM模块如何支持PHP语言进行讨论。
Nginx 专为性能优化而开发,其最知名的优点是它的稳定性和低系统资源消耗以及对HTTP并发连接的高处理能力(单台物理服务器可支持30 000~ 50 000 个并发请求)。正因为如此企业纷纷选择 Nginx来提供Web服务
1.编译安装Nginx 1.15安装及运行控制
######试验环境:CentOS 7.6 Nginx 1.15 关闭防火墙,核心防护###
1.1软件支持
Nginx的配置及运行需要pcre,zlib 等软件包的支持,因此应预先安装这些软件的开发包(devel),以便提供相应的库和头文件,确保Nginx的安装顺利完成
[root@localhost ~]# yum -y install pcre-devel zlib-devel
注释:pcre-devel、zlib-devel这俩个包分别是让nginx支持正则表达式和支持压缩功能
1.2 创建运行用户,组
Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账户,以便更准确的控制其访问权限,降低安全风险。例如,创建一个名为Nginx的用户,不建立宿主的文件夹,也禁止登录到Shell环境。
[root@localhost ~]# useradd -M -s /sbin/nologin nginx
注释:-M是不创建宿主目录;-s指定shell环境
##1.3編安装Nginx##
配置Nginx的编译选项时,将安装目录设为/usr/local/nginx, 运行用户和组均设为nginx;后用http stub status module模快以支持状恣統i汁,便于査看服努器的達接信息.
具体选项根据实际需要来定,配置前可参考"./configure --help"给出的说明。
上侍nginx-1.15.9.tar.gz至/opt目彖
[root@localhost ~]# cd /opt
在解压之前也是需要把安装底层的语言环境
[root@localhost opt]#yum -y install
gcc
gcc-c++
make
pcre-devel \ // 让nginx支持正则表达式
expat-devel \ //让nginx支持多种的语言
perl // 是指程序运行的解释器,能够解析各种语言
[root@localhost opt]# tar xzvf nginx-1.15.9.tar.gz //然后切到解压之后的扩展目录
[root@localhost nginx-1.15.9]# ./configure \ ###配置
–prefix=/usr/local/nginx \ ###配置安装的路径为/usr/local/nginx
–user=nginx \ ###用户是nginx
–group=nginx \ ###组为nginx
–with-http_ stub status_ module ####with开头的是模块后面是模块名称作用是一个监视模块,可以查看目前的连接数等一些信息
[root@localhost nginx-1.15.9]# make && make install
##l路径优化##
カ了使Nginx服努器的返行更加方便,可以カ主程序nginx創建縫接文件,以便管理昃
直接执行"nginx"命令就可以调用Nginx的主程序
[root@localhost nginx-1.15.9]# In -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost nginx-1.15.9]# Is -l /usr/local/sbin/nginx
Irwxrwxrwx 1 root root 27 2F 28 05:17 /usr/local/sbin/nginx -> /usr/local/nginx/sbin/nginx
- Nginx 的运行控制
##2.1检查配置文件##
与Apache的主程序httpd类似,Nginx 的主程序也提供了“-t" 迭項用来対配置文件迸行检查,以便找出不当或错误的配置。配置文件nginx.conf默认位于安装目录下的conf/子目录中。若要检查位于其他位置的配置文件,可使用"-C"选项来指定路径。
[root@localhost nginx- 1.15.9]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
##2.2启动,停止Nginx###
直接运行Nginx即可启动Nginx服务器,这种方式將使用默人的配置文件,若要改用其他配置文件,需添加"-C配置文件路径”选项来指定路径。需要注意的是,若服务器中已装有httpd等其他Web服努軟件,应采取措施(修改端口.停用或卸戟)避免冲突。
[root@localhost nginx- 1.15.9]# nginx
[root@localhost nginx- 1.15.9]# netstat -anpt I grep nginx
tcp 0 0.0.0.0:80 0.0.0.0:* LISTEN 11191/nginx: master
通过檢査Nginx程序的監听状恋,或者在渕覧器中訪向此Web服努(默认頁面將星示"Welcom to nginx!" ) , DJCLöf-iA Nginx B5SSiERiEi.
[root@localhost nginx-1.15.9]# yum -y install lynx
[root@localhost nginx-1.15.9]# lynx 127.0.0.1
Welcome to nginx!
Welcome to nginx!
主程序Nginx支持标准的进程信号,通过kill或killall命令发送HUP信号表示重载配置,QUIT信号表示退出进程,KILL 信号表示杀死进程。例如,若使用killall 命令,重载配置、停止服务的操作分别如下所示(通过"-s"选项指定信号种类)
[root@localhost ~]# yum -y install psmisc ###最小安装没有killall命令需要安装
[root@localhost ~]# killall -s HUP nginx
[root@localhost ~]# killall -S QUIT nginx
###选项-S HUP等同于-1重新加载###选项-S QUIT等同于-3停止服务
当Nginx进程运行时,PID号默认存放在logs/目录下的nginx.pid 文件中,因此若改用kill命令,也可以根据nginx.pid文件中的PID号来进行控制。
##2.3添加Nginx系统服务##
为了使Nginx服务的启动、停止、重载等操作更加方便,可以编写基于CentOS 7.6的Nginx服务控制文件使用systemctl工具来进行管理,CentOS7.6系统的管理习惯
[root@localhost ~]# vim /lib/systemd/system/nginx.service
###要刷配置参数##
[Unit] 单元信息
Description=nginx 描述
After=network.target 网络服务模式 //描述服务类别
[Service]
Type=forking forking服务类型,一般start开启这个服务,后天会有一个守护进行去支撑他,让他持续在线工作 //后台运行形式
PIDFile=/usr/local/nginx/logs/nginx.pid // PID文件位置
ExecStart=/usr/local/nginx/sbin/nginx // 启动服务
ExecReload=/usr/bin/kill -s HUP $MAINPID // 重新加载
ExecStop=/usr/bin/kill -s QUIT $MAINPID //停止
PrivateTmp=true //开启缓存
[Install]
WantedBy=multi-user.target 多用户登录模式
[root@localhost ~]# chmod 754 /lib/systemd/system/nginx.service
[root@localhost ~]# systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
#2.4检查通过systemctl命令能否正常启动、停止、重启、重载Nginx服务##[root@localhost ~]# netstat -anutp lgrep nginx
[root@localhost ~]# systemctl start nginx
[root@localhost ~]# netstat -anutp lgrep nginx
tcp 000.0.0.0:80 0.0.0.0:* LISTEN 11410/nginx: master
由各种配置语句组成,不使用特定的界定标记。全局配置部分包括Nginx服务的运行用户、工作进程数、错误日志、PID 存放位置等基本设置
3、配置文件Nginx.conf
在Nginx服务器的主配置文件/usr/local/nginx/conf/nginx.conf中,包括全局配置、I/0事件配置和HTTP配置这三大块内容,配置语句的格式为“关键字值;” (末尾以分号表示结束),以"#"开始的部分表示注释。
##3.1全局配置##
由各种配置语句组成,不使用特定的界定标记。全局配置部分包括Nginx服务的运行用户、工作进程数、错误日志、PID存放位置等基本设置
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
#user nobody;
worker_ _processes 1;
##运行用户##工作进程数
#error. log logs/error.log;
#error_ log logs/error.log notice;#error_ log logs/error.log info;#pidlogs/nginx.pid;
####错误日志文件的位置
####PID文件的位置
上述配置中,worker _processes表示工作进程的数量。若服务器有多块CPU或者使用多核处理器,可以参考CPU核心总数来指定工作进程数,如设为8;如果网站访问量需求并不大,- -般设为1就够用了。其他三项配置均已有注释,表示采用默认设置,例如,Nginx的运行用户实际是编译时指定的nginx,若编译时未指定则默认为nobody
##3.2 I/O时间配置##
使用"events { }” 界定标记,用来指定Nginx进程的I/O响应模型、每个进程的连接数等设置。对于2.6及以上版本的内核,建议使用epoll模型以提高性能;每个进程的连接数应根据实际需要来定,- -般在10 000以下(默认为1024)
events {
use epoll;
worker_ connections 4096;
若工作进程数为8,每个进程处理4 096个连接,则允许Nginx正常提供服务的连接数
已超过3万个(4 096x8=32 768),当然具体还要看服务器硬件、网络带宽等物理条件的性能表现。
##3.3 HTTPëï##
使用"http {}"界定标记,包括访问日志、HTTP端口、网页目录、默认字符集、连接保持,以及后面要讲到的虚拟Web主机、PHP解析等一 系列设置,其中大部分配置语句都包含在子界定标记"server {}"内
#user nobody;
worker_ processes 1;
#error log logs/error.log;
#error log logs/error.log notice;#error log logs/error.log info;
#pid
logs/nginx.pid;
events f
use epoll;
worker_ connections 4096;
http {
includemime.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; .
###●访问日志位置,去掉前面注释
sendfileon;#tcp_ nopush on;
###支持文件发送(下载)
#keepalive_ timeout 0;keepalive_ timeout 65;
###链接保持时间
#gzip on;
server {
###WEB服务的监听配置
listen80;
###WEB服务的监听端口
server_ name www.51xit.top;
###●网站名称(FQDN)
charset koi8-r;
###●网页的默认字符集
#access_ log logs/host.access.log main;
location/ {
root htm|;
index index.html index.htm;
###根目录配置
###网站根目录的位置###默认首页(索引页)
error_ page 404
/404.html;
# redirect server error pages to the static page /50x.html
#
error_ page 500 502 503 504 /50x.html;
###内部错误反馈页面
location = /50x.htmI{
###错误页面配置
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80#
#location ~ .php$ f
#proxy_ pass http://127.0.0.1;
#]
# pass the PHP scripts to FastCGl server listening on 127.0.0.1:9000#
#location ~ l.php$ f
#
root
html;
#
fastcgi pass127.0.0.1:9000;
#
fastcgi_ index index.php;
#
fastcgi_ param SCRIPT FILENAME /scripts$fastcgi script name;#
includefastcgi_ params;
#]
# deny access to .htaccess files, if Apache's document root# concurs with nginx's one
#
#location ~ /.ht (
#deny all;
#]
# another virtual host using mix of lP-, name-, and port-based configuration#
#server (
#listen
8000;
#
listen
somename:8080;
#
server name somename alias another.alias;
#
location / (
#
roothtml;
#
index index.html index.htm;
#]
#]
# HTTPS server
#
#server {
# listen443 ssl;
#server_ name localhost;
ssl certificatecert.pem;# ssl _certificate_ key cert.key;
# ssl session cache shared:SSL:1m;# ssl _session timeout 5m;
# ssI ciphers HIGH:!aNULL:!MD5;# ssl _prefer_ server_ ciphers on;
# location / {
#
root - html;
#
index index.html index.htm;#}
#}
上述配置中,listen语句允许同时限定IP地址,采用"IP地址:端口”形式; root语句用
来设置特定访问位置(如"location /"表示根目录)的网页文档路径,默认为Nginx安装目录”下的htmI/子目录,根据需要可改为/var/www/html等其他路径。
3、彷向状恣統汁
Nginx 内置了 HTTР STUB_ STATUS 状态统计模块,用来反馈当前的Web访问情况,配置编译参数时可添加–with-http_ stub status_ module来启用此模块支持,可以使用命令/usr/local/nginx/sbin/nginx -V îB3ÁJ Nginx ÆEâ HTTP_ STUB_ STATUS tt.
要使用Nginx的状恣統汁功能,除了后用内建模快以外,胚需要修改nginx.conf配置文件,指定访问位置并添加stub_ status配置代码。
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
###省略####在localtion /这个大模块下面location /status模块location/ (
root html;
index index.html index.htm;
location /status [stub_ status on;access_ log off;
####省略####
[root@localhost nginx]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost nginx]# systemctl restart nginx
[root@localhost nginx]# lynx 127.0.0.1/status
Active connections: 1
###活动连接数
server accepts handled requests ### Bžk96EÊfÊ
111
###上个数字从左到右依次表示:已处理的连接数、成功的TCP握手次数、已处理的请求数
Reading: 0 Writing: 1 Waiting: 0