haxianhe's blog

《实战Nginx:取代Apache的高性能Web服务器》

字数统计: 2.3k阅读时长: 8 min
2018/12/04 Share

Web服务器也称为WWW服务器、HTTP服务器,其主要功能是提供网上信息浏览服务。

Unix和Linux平台下常用的Web服务器有Apache、Nginx、Lighttpd、Tomcat、IBM WebSphere等,其中应用最广泛的是Apache。而Windows NT/2000/2003平台下最常用的服务器测试微软公司的IIS(INternet Information Server)。

mac下nginx安装及其目录配置

背景:mac开发机,本地搭建nginx服务,对服务端存储的文档做展示。

安装nginx

直接通过brew安装

1
brew install nginx

启动nginx

1
sudo brew services start nginx

停止nginx

1
sudo brew services stop nginx

重新加载nginx

1
sudo brew service restart nginx

配置文件遍历

1
2
3
4
5
6
7
8
9
vim /usr/local/etc/nginx/nginx.conf
# server 节点
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}

几个关键点:

  • ~ 和root 配置的目录必须是可达到的路径 即/Users/yourusername/dir_needed 此路径可达,否则访问时会报404

一些文件路径

用brew安装的nginx 一些文件路径不一样需要注意

  • 安装目录

    /usr/local/Cellar/nginx/1.10.3
    
  • 配置文件路径

    /usr/local/etc/nginx/nginx.conf
    
  • 日志文件路径

    /usr/local/var/log/nginx $ ls -lrt
    total 80
    -rw-r--r--  1 staff  admin  29646  3 19 14:45 access.log
    -rw-r--r--  1 staff  admin   6430  3 19 19:11 error.log
    

Nginx与PHP(FastCGI)的安装、配置与优化

LNMP

在互联网服务器架构中,我们经常可以听到LAMP(Linux+Apache+Mysql+Perl/PHP/Python)架构。

现在,由于Nginx拥有超越Apache的卓越性能,LAMP架构正在逐渐被LNMP()Linux+Nginx+Mysql+PHP)架构所取代。

FastCGI

FastCGI是语言无关的、可伸缩的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail-Over特性等。

FastCGI工作原理

  1. FastCGI进程管理器自身初始化,启动多个CGI解释器进程(多个php-cgi)并等待来自Web Server的连接。在本文中,采用PHP-FPM进程管理器启动多个php-cgi FastCGI进程。启动php-cgi FastCGI进程时,可以配置以TCP和UNIX套接字两种方式启动。
  2. 当客户端请求到达Web服务器(Nginx)时,Web服务器将请求采用TCP协议或UNIX套接字方式转发到FastCGI主进程,FastCGI主进程选择并连接到一个CGI解释器(子进程)。Web服务器将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
  3. FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web服务器(Nginx)。当FastCGI子进程关闭连接时,请求便告知处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器的下一个连接。而在一般的普通CGI模式中,php-cgi在此便退出了。

所以,你可以想象普通的CGI模式有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重新初始化全部数据结构。使用FastCGI,所有的这些都只在进程启动时发生一次。

PHP FastCGI的优点

  1. PHP脚本运行速度更快。PHP解释程序被载入内存而不用每次需要时从存储器中读取,此举极大提升了依靠脚本运行站点的性能。
  2. 需要使用的系统资源更少。由于服务器不用再=在每次需要时都载入PHP解释程序,你可以将站点的传输速度提升很多而不必正价CPU负担。
  3. 不需要对现有的代码作任何改变。运行在Apache+PHP上的陈旭,无需修改即可适用于PHP的FastCGI。

Nginx HTTP 负载均衡和反向代理

什么是负载均衡和反向代理

随着网站访问量的快速增长,单台服务器已经无法承担大量用户的并发访问,必须采用多台服务器协同工作,以提高计算机系统的处理能力和计算强度,满足当前业务量的需求。而如何在完成同样功能的多个网络设备之间实现合理的业务量分配,使之不会出现一台设备过忙、而其他的设备却没有充分使用的情况。要解决这一问题,可以采用负载均衡的方法。

负载均衡

负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无需其他服务器的帮助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接受到请求的服务器独立地回应客户的请求。均衡负载等狗平均分配客户请求到服务器阵列,籍此快速获取重要数据,解决大量兵法访问服务问题。

反向代理

反向代理是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返会费Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。由于外部网络上的主机并不会配置并使用这个代理服务器,普通代理服务器也被设计为在Internet上搜寻多个不确定的服务器,而不是针对Internet上多个客户机的请求访问某个固定的服务器,因此普通的代理服务器不支持外部对内部网络的访问请求。当一个代理服务器等代理外部网络上的主机访问内部网络时,这种代理服务的方式称为反向代理服务。此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个Web服务器而不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使网页信息遭到破坏,这样就增强了Web服务器的安全性。

常见的Web负载均衡的方法

用户手动选择方式

这是一种较为古老的方式,通过在主站首页提供不同线路、不同服务器链接的方式,来实现负载均衡。这种方式在一些提供下载业务的网站中比较常见。

DNS轮询

大多域名注册上都支持对同一主机名添加多条A记录,这就是DNS轮询,DNS服务器将解析按照A记录的顺序,随机分配到不同的IP上,这样就完成了简单的负载均衡。

DNS轮询的成本非常低,在一些不重要的服务上,被经常使用。

虽然DNS轮询成本低廉,但是,DNS负载均衡存在两个明显的缺点。

  1. 可靠性低
  2. 负载分配不均衡

四/七层负载均衡设备

OSI七层模型

物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

现代负载均衡技术通常操作于OSI网络模型的第四层或第七层。

第四层负载均衡将一个Internet上合法注册的IP地址映射为内部服务器的IP地址,对每次TCP连接请求动态使用其中一个内部IP地址,达到负载均衡的目的。在第四层交换机中,此种均衡技术得到广泛应用。
第七层负载均衡控制应用层服务的内容,提供了一种对访问流量的高层控制方式,适合对HTTP服务器群的应用。第七层负载均衡技术通过检查流经HTTP报头,根据报头内的信息来执行负载均衡任务。

Nginx的Rewrite规则

什么是Nginx的Rewrite规则

Rewrite的主要功能就是实现URL的重写。

正则表达式在计算机科学中,是指一个用来描述或匹配一系列符合某个句法规则的字符串的单个字符串。

通过Rewrite规则,可以实现规范的URL、根据变量来做URL转向及选择配置。

CATALOG
  1. 1. mac下nginx安装及其目录配置
    1. 1.1. 安装nginx
    2. 1.2. 启动nginx
    3. 1.3. 停止nginx
    4. 1.4. 重新加载nginx
    5. 1.5. 配置文件遍历
    6. 1.6. 一些文件路径
  2. 2. Nginx与PHP(FastCGI)的安装、配置与优化
  3. 3. Nginx HTTP 负载均衡和反向代理
    1. 3.1. 什么是负载均衡和反向代理
    2. 3.2. 常见的Web负载均衡的方法
  4. 4. Nginx的Rewrite规则