web服务器集群——Nginx服务与LNMP部署

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压缩的页面

发布了15 篇原创文章 · 获赞 4 · 访问量 8502

猜你喜欢

转载自blog.csdn.net/feili12138/article/details/104273658