Nginx服务与LNMP部署
Nginx简介:跟Apache一样,是一款web服务器软件,也在普遍使用
Nginx的特点:并发量高,内存占用小、处理速度快、但是CPU占用大、安全性较低、模块较少
源码编译安装Nginx
1.安装支持软件,Nginx的配置需要pcre、zlib等软件
yum -y install pcre-devel zlib-devel
2.nginx默认以nobody运行,建议建立专用用户
useradd -M -s /sbin/nologin nginx
3.下载Nginx软件包解压安装
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install
编译安装nginx选项:
--prefix=目录:设置Nginx的安装路径 默认路径:/usr/local/nginx
--sbin-path=目录:设置Nginx的可执行文件路径 默认路径:prefix/sbin/nginx
--conf-path=目录:设置Nginx配置文件路径 默认路径:prefix/conf/nginx.conf
--pid-path=目录:设置Nginx pid文件路径 默认路径:prefix/logs/nginx.pid
--error-log-path=目录:设置错误日志存放路径 默认路径:prefix/logs/error.log
--http-log-path=目录:设置访问日志存放路径 默认路径:prefix/logs/access.log
--user=用户名:设置运行Nginx的用户 默认用户:nobody
--group=用户组名:设置运行Nginx的用户组 默认用户组:nobody
4.路径的优化
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin
5.检查优化以及配置文件
启动Nginx:nginx
对网页访问测试服务是否搭建成功(下图为Nginx的默认网页,能访问为成功)
Nginx服务管理与配置
启动命令:nginx 停止命令:killall -s QUIT nginx 重启命令:killall -s QUIT nginx 》》nginx
重新加载:killall -s HUP nginx 查看服务开启状态:ps -ef | grep "nginx" 或者netstat -anpt | grep "nginx"
为了方便我们自己写个脚本,然后可以用service命令来管理nginx
脚本如下:
#!/bin/bash
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
isstatus=`ps -ef | awk '{print $1}' | grep "nginx" | wc -l`
start()
{
if [ $isstatus -ne 0 ]
then
echo "nginx already started"
else
$PROG
echo "nginx starting......"
fi
}
stop()
{
if [ $isstatus -ne 0 ]
then
kill -s QUIT $(cat $PIDF)
echo "nginx shutting down......"
else
echo "nginx has ceased"
fi
}
restart()
{
if [ $isstatus -ne 0 ]
then
kill -s QUIT $(cat $PIDF)
$PROG
echo "nginx restart......"
else
echo "nginx not started"
fi
}
reload()
{
kill -s HUP $(cat $PIDF)
echo "nginx is reloading......"
}
status()
{
if [ $isstatus -eq 0 ]
then
echo "nginx:nginx not running"
else
echo "nginx:mginx is running"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
reload)
reload
;;
status)
status
;;
*)
echo "Usage:$0 {start|stop|restart|reload|status}"
esac
注意:记得把脚本名字改成nginx,然后再放到/etc/init.d/目录下,之后就可以使用service命令管理了
启动服务:service nginx start 停止服务:service nginx stop 重启服务:service nginx restart
查看服务:service nginx status 重新加载服务:service nginx reload
nginx配置
nginx主配置文件位置:/usr/local/nginx/conf/nginx.conf(源码包安装)
配置文件详解
nginx配置文件主要分为六个区域:
1.main:全局设置 2.events:nginx工作模式 3.http:http设置
4.sever:主机设置 5.location:URL匹配 6.upstream:负载均衡服务器设置
配置文件结构分布:
main
events{。。。。。。}
http{
。。。。。。
server{
。。。。。。
location 1{。。。。。。}
location 2{。。。。。。}
}
}
全局配置:
user nobody; //程序用户名
worker_processes 1; //设置nginx子进程数量,即提供服务的进程数量,该数值建议和服务cpu核数保持一致
error_log logs/error.log; //设置错误日志的路径
error_log logs/error.log notice; //设置错误日志的路径
error_log logs/error.log info; //设置错误日志的路径
pid logs/nginx.pid; //设置nginx进程pid文件所在路径
worker_rlimit_nofile 10000; //设置nginx最多打开文件数限制
events配置:
worker_connections 1024; //定义每个work_process同时开启的最大连接数
accept_mutex on; //防止多个进程争抢资源,默认就是on
multi_accept on; //nginx worker processer可以做到同时接收多个新到达的网络连接,默认为off
use epoll; //设置模式,模式有如下:
select:只能在Windows下使用,这个事件模型不建议在高负载的系统使用
poll:Nginx默认首选,但不是在所有系统下都可用
kqueue:这种方式在FreeBSD 4.1+, OpenBSD2.9+, NetBSD 2.0, 和 MacOS X系统中是最高效的
epoll:这种方式是在Linux 2.6+内核中最高效的方式
rtsig:实时信号,可用在Linux 2.2.19的内核中,但不适用在高流量的系统中
eventport:Solaris 10最高效的方式
http配置:
MIME-Type
include mime.types; //设置nginx能识别的网络资源媒体类型(如,文本、html、js、css、流媒体等)
default_type application/octet-stream; //设置默认的type,如果不定义改行,默认为text/plain.
log_format
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
其中main为日志格式的名字,后面的为nginx的内部变量组成的一串字符串。
access_log logs/access.log main; //设置日志的路径以及采用的日志格式,该参数可以在server配置块中定义
sendfile on; //是否调用sendfile函数传输文件,默认为off
sendfile_max_chunk 128k; //限制Nginx worker process每次调用sendfile()函数传输数据的最大值,默认值为0无限制
tcp_nopush on; //当调用tcp_cork方法进行数据传输,默认值为on
keepalive_timeout 65 60; //第一个值设置nginx服务器与客户端会话结束后仍旧保持连接的最长时间,单位是秒,默认为75s
第二个值针对客户端的浏览器来设置的,可以通过curl -I看到header信息中有一项Keep-Alive: timeout=60,如果
补充:不设置就没有这一项,第二个数值设置后,浏览器就会根据这个数值决定何时主动关闭连接,Nginx服务器就不操心了。但
有的浏览器并不认可该参数
send_timeout //发送响应的超时时间
client_max_body_size 10m; //限制Content-Length所示值的大小的
gzip on; //是否开启gzip压缩
gzip_min_length 1k; //设置允许压缩的页面最小字节数,默认值20
gzip_buffers 4 16k; //设置系统获取几个单位的buffer用于存储gzip的压缩结果数据流
gzip_http_version 1.1; //用于识别 http 协议的版本
gzip_comp_level 6; //gzip压缩比
gzip_types mime-type ... ; //匹配mime类型进行压缩
gzip_proxied any; //Nginx作为反向代理的时候启用,决定开启或者关闭后端服务器返回的结果是否压缩
以下为可用的值:
off - 关闭所有的代理结果数据的压缩
expired - 启用压缩,如果header头中包含 "Expires" 头信息
no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息
no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息
private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息
no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息
no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息
auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息
any - 无条件启用压缩
gzip_vary on; //可以让前端的缓存服务器缓存经过gzip压缩的页面