LNMP企业架构实战

一、Nginx Web服务器简介

本节介绍 Nginx高性能Web服务器、 Nginx工作原理、安装配置及升级、 Nginx配置文件深入剖析、Nginx虚拟主机、 location案例演示、 Nginx rewire企业案例实战、Https安全Web服务器及 Nginx高性能集群实战等内容。
二、Nginx Web入门简介
Nginx(engine x)是一个高性能HTTP、反向代理、IMAP、POP3、SMTP服务器
Nginx是由 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发的,第一个公开版本
发布于2004年10月4日。其源代码以类BSD许可证的形式发布,因它的稳定性、丰富的
功能集、示例配置文件和低系统资源的消耗而闻名
由于 Nginx的高性能、轻量级,目前越来越多的互联网企业开始使用 Nginx做为Web
服务器。据 Netcraft统计,在2017年4月份,世界上最繁忙的网站中有28.72%使用Nignx
作为其服务器或者代理服务器。
Nginx已经在众多流量很大的俄罗斯网站上使用了很长时间,这些网站包括 Yandex、Mai.Ru、 VKontakte以及 Rambler。目前互联网主流公司京东、360、百度、新浪、腾讯、阿里都在使用 nginx作为自己的Web服务器。
Nginx特点是占有内存少,并发能力强,事实上 Nginx的并发能力确实在同类型的网页
服务器中表现较好。
Nginx相对于 Apache优点如下:
1、高并发响应性能非常好,官方 Nginx处理静态文件并发5w/s;
2、负载均衡及反向代理性能非常强;
3、系统内存和CPU占用率低;
4、可对后端服务进行健康检查;
5、支持 PHP CGI方式和 FascCGI方式
6、可以作为缓存服务器、邮件代理服务器
7、配置代码简洁且容易上手
三、Nginx工作原理
Nginx Web服务器主要是由各种模块协同工作,模块从结构上分为核心模块,基础模
块和第三方模块,其中三类模块分别如下:
1、核心模块:HTTP模块、event模块和mail模块等
2、基础模块:Http access模块、Http FastCGI模块、Http proxy模块和HTTP rewrite模块
3、第三方模块: Http upstream request hash模块、 notice模块和 Http access key模块、 limit_req模块等
Nginx的模块从功能上分为如下三类
1、handlers(处理器模块):此类模块直接处理请求,并进行输出内容和修改 headers信息等操作, handlers处理器模块一般只能有一个
2、filters(过滤器模块):此类模块主要对其他处理器模块输出的内容进行修改操作,最后由 Nginx输出
3、proxies(代理类模块):此类模块是 Nginx的 Http upstream之类的模块,这些模块主要与后端一些服务比如 Fast CGI等进行交互,实现服务代理和负载均衡等功能。

Nginx由内核和模块组成,其中内核的设计非常微小和简洁,完成的工作也非常简单仅是通过查找配置文件将客户端的请求映射到一个 location block,而 location是 Nginx配置中的一个指令,用于访问的URL匹配,而 location中所配置的每个指令将会启动不同的模块去完成相应的工作
四、Nginx安装配置
Nginx Web安装时可以指定很多的模块,默认需要安装 rewrite模块,需要系统有PCRE库,安装PCRE支持 rewrite功能,以下为安装 Nginx Web服务器的方法,注意Nginx整合PCRE库,需要指定PCRE源码目录,而不是PCRE编译完成之后的路径,否则会报错。代码如下:
#安装比PCRE库支持
yum install pcre-devel pcre -y
#还要在linux安装其它依赖包
yum install gcc-c++
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
#下载nginx源码包
cd /usr/src
wget -c http://nginx.org/download/nginx-1.12.0.tar.gz
#解压nginx源码包
tar-xzf nginx-1.12.0. tar. gz
#进入解压目录,然后sed修改为Nginx版本信息为JWS
cd nginx-1.12. 0
sed -i -e ‘s/1. 12. 0//g’ -e ‘s/nginx//JWS/g’ -e ‘s/“NGINX”/“JWS”/g’ src/core/nginx.h
#预编译 Nginx
useradd www;./configure --user=www --group==www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_moudle
#./conf igure预编译成功后,执行make命令进行编译
make
#make执行成功后,执行 make install正式安装
make install
至此nginx Web服务器安装完毕
测试 Nginx服务安装是否正确,同时启动 Nginx Web服务,具体步骤如下:
检查 Nginx配置文件是否正确,返回OK即正确。代码如下:
[root@bogon /]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@bogon /]#
然后启动 Nginx,执行命令/usr/ocal/ nginx/sbin/ nginx按 Enter键即可
[root@bogon ~]# /usr/local/nginx/sbin/nginx
查看进程是否已启动,代码如下
[root@bogon ~]# ps -ef | grep nginx
root 9281 1 0 08:03 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
www 9282 9281 0 08:03 ? 00:00:00 nginx: worker process
root 9284 2881 0 08:04 pts/0 00:00:00 grep nginx
[root@bogon ~]#
#关闭nginx /usr/local/nginx/sbin/nginx -s stop
#重新加载设置/usr/local/nginx/sbin/nginx -s reload
通过浏览器访问 nginx默认测试页面,直接在浏览器上输入虚拟机的ip地址就好,记得把防火墙关了,service iptables stop 是临时关闭,下次重启虚拟机,防火墙会启动,
Nginx配置文件优化
#定义 Nginx运行的用户和用户组
user www www
#启动进程,通常设置成和CPU的数量相等
worker processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
#为每个进程分配CPU,上例中将8个进程分配到B个CPU,当然可以写多个,或者将一个进程
#分配到多个CPU
worker_rlimit_nofile 102400;
#该指令是当一个Nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit-n)
#与Nginx进程数相除,但是 Nginx分配请求并不是那么均匀,所以最好与 limit-n的值保持一致
#全局错误日志及PID文件
error_log /usr/local/nginx/logs/error.log
#错误日志定义等级,[ debug| info | notice | warn | error | crit]
pid /usr/local/nginx/nginx.pid;
#工作模式及连接数上限
events{
use epoll;
#epoll是多路复用I/O(I/O multiplexing)中的一种方式,但是仅用于Linux2.6以上内核,可以大
#大提高Nginx的性能
worker_connections 102400;
#单个后台 worker process进程的最大并发连接数(最大连接数=连接数进程数)
multi_accept on;
#尽可能多地接受请求
}
#设定HTTP服务器,利用它的反向代理功能提供负载均衡
http{
#支持设定MIME类型,类型由mtime.type文件定义
include mime .types;
default_type application/octet-stream;
#设定日志格式
access_log /usr/local/nginx/log/nginx/access.log
sendfile on;
#指令指定Nginx是否调用send file函数(zero copy方式)来输出文件,对于普通应用必须
#设为on
#如果用来进行下载等应用磁盘I/0重负载应用,可设置为off,以平衡磁盘与网络I/O处理#速度,降低系统的 uptime
#autoindex on;
#开启目录列表访问,合适下载服务器,默认关闭
tcp_nopush on;
#防止网络阻塞
keepalive_timeout 60;

keepalive超时时间,客户端到服务器端的连接持续有效时间,当出现对服务器的后继请求时,

#keepalive- timeout功能可避免建立或重新建立连接
tcp_nodelay on;
#提高数据的实时响应性
#开启gzip压缩
gzip on;
gzip_nin_length 1KB;
gzip_buffers 4 16KB;
gzip_http_version 1.1;
gzip_comp_level 2;
#压缩级别大小,最大为9,值越小,压缩后比例越小,CPU处理更快,值越大,消耗CPU比较高
gzip_types text/plain application/x -javascript text/css application/xml;
gzip_vary on;
client_nax_body_size 10MB;
#允许客户端请求的最大单文件字节数
client_body_buffer_size 128KB;
#缓冲区代理缓冲用户端请求的最大字节数
proxy_connect_timeout 90;
#Nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90;
#后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90;
#连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4KB;
#设置代理服务器(imx)保存用户头信息的缓冲区大小
proxy_butters 4 32KB;
#proxy_buffer缓冲区,网页平均在32KB以下的话,这样设置
proxy_busy_buffers_size 64KB;
#高负荷下缓冲大小(proxy_buffer*2)
#设定请求缓冲
large_client_header_buffers 4 4KB;
client_header_buffer_size 4KB;
#客户端请求头部的缓冲区大小,这个可以根据系统分页大小来设置,一般一个请求的头
#部大小不会超过1KB,不过由于一般系统分页都要大于1KB,所以这里设置为分页大小,
#分页大小可以用命令getconf

PAGESIZE取得

open_file_cache_max=102400 inactive=20s;
#这个将为打开文件指定缓存,默认是没有启用的,mx指定缓存数量,建议和打开文件数一致
#inactive是指经过多长时间文件没被请求后删除缓存
open_file_cache_valid 30s;
#这个是指多长时间检查一次缓存的有效信息
open_file_cache_min_uses 1;
#open_file_cache指令中的 inactive参数时间内文件的最少使用次数,如果超过这个数字,文
#件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive
#包含其他配置文件,如自定义的虚拟主机
include vhosts.conf;
Nginx配置文件优化二
Nginx Web默认发布静态页面,也可以均衡后端动态页面,用户发起HTTP请求,如果请求为静态页面,Nginx直接处理并返回,如果请求的是动态页面, Nginx收到请求之后会进行判断,转到后端服务器去处理Nginx实现负载均衡需要基于upstream模块,同时需要设置 location proxy_ pass:转发指令实现以下为 Nginx应用负载均衡集群配置,根据后端实际情况修改即可,
dzqc_www为负载均衡模块的名称,可以任意指定,但必须跟vhost.conf、 nginx.conf虚拟主机的proxy_pass段保持一致,否则不能将请求转发至后端的服务器, weight表示配置权重,在fail_timeout内检查 max_fails次数,失败则剔除均衡,代码如下:
pstream dzqc_www{
server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s
server 127.0.0.1 weight=1 nax_fails=2 fail_timeout=30s
}
#虚拟主机配置
server{
#侦听80端口
listen 80;
#定义使用ww.dzqcyunwei.net访问
server_name ww.dzqcyunwei.net;
#设定本虚拟主机的访问日志
access_log logs/access.log main;
root /data/webapps/www; #定义服务器的默认网站根目录位置
index index. php index. html index.htm;#定义首页素引文件的名称

默认请求

location ~/{
root /data/webapps/www;
#定义服务器的默认网站根目录位置
index index. php index. html index.htm;#定义首页索引文件的名称
#以下是一些反向代理的配置
proxy_next_upstream http_502 http_504 error timeout invalid_header
#如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到 upstream
#负载均衡池中的另一台服务器,实现故障转移
proxy_redirect_off;
#后端的web服务器可以通过x- Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real -IP $remote_addr;
proxy_set_header X- Forwarded-For KaTeX parse error: Double subscript at position 12: proxy_add_x_̲forwarded_for; …
{
root /data/webapps/www
#expires定义用户浏览器缓存的时间为3天,如果静态页面不常更新,可以设置更
#长,这样可以节省带宽和缓解服务器的压力,在浏览器保存该类型文件的天数。
expires 3d;
}
#PHP脚本请求全部转发到 FastcCGI处理,使用 FastCGI默认配置
location ~. php ${
root /root;
FastCGI_pass 127.0.0.1:9000;
FastCGI_index index.php
FastCGI_param SCRIPT_FILENAME /data/webapps/www $FastCGI_script_name;
include FastCGI_params;
}
设定查看 Nginx状态的地址
location /NginxStatus{
stub_status on;
}
}
}
通过 expires参数设置,可以在浏览器缓存静态文件,从而减少用户与服务器之间的请
求和流量。具体 expires定义是给一个资源设定一个过期时间,浏览器无须去服务端下载资
源,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。
如果静态文件不常更新, expires可以设置为30d,表示在这30天之内再次访问该静态
文件,浏览器会发送一个HTTP请求,会比对服务器该文件最后更新时间是否有变化,如果
没有变化,则不会从服务器抓取,返回HTTP状态码304,如果有修改,则直接从服务器重
新下载,返回HTTP状态码200。

猜你喜欢

转载自blog.csdn.net/qq_44920017/article/details/89485437