Nginx和Apache

Nginx和Apache

基本概念:
  • cgi协议(通用网关接口):只要你按照cgi协议去编写程序,就能实现语言解释器与webwerver的通信。如php-cgi程序。
  • fast-cgi 是cgi的改良版本,每次处理完请求后,不会kill掉这个进程,而是保留这个进程,使这个进程可以一次处理多个请求。
  • php-fpm 即php-Fastcgi Process Manager,是 FastCGI 的实现,并提供了进程管理的功能。
  • Nginx 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。
 
【PHP的运行原理】
CGI:PHP解析器与webserver的一个协议桥梁。
FastCGI:每次处理完请求后不会kill掉进程,会保留进程。属于CGI的改良版本。
PHP-FPM:PHP FastCGI Process Manager,PHP FastCGI的进程管理器。
 
PHP的垃圾回收机制:PHP可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数这种单纯的垃圾回收机制。
每个对象都内含一个引用计数器,每个reference链接到对象,计数器加1,当reference离开生存空间或者被设为null,计数器减1,
当某个引用计数器的对象为0时,PHP知道你将不再需要使用这个对象,释放其所占有的内存空间。
 
 
CGI、FastCGI和PHP-FPM关系图解?
CGI(Common Gateway Interface)全称是“通用网关接口”,WEB 服务器与PHP应用进行“交谈”的一种工具,其程序须运行在网络服务器上。
CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php、perl、tcl等。
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次。
它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行,并且接受来自其它网站服务器来的请求。
 
FastCGI与CGI特点:
对于CGI来说,每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展,并重初始化全部数据结构。
而使用FastCGI,所有这些都只在进程启动时发生一次。
一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。
由于FastCGI是多进程,所以比CGI多线程消耗更多的服务器内存,php-cgi解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。
 
关于Nginx:
    • 在项目使用中,nginx使用最多的三个核心功能是:反向代理、负载均衡、静态服务器;
    • Nginx进程进程包含 master 进程和 worker 进程两种进程。master 进程只有一个,负责监听端口,接收来自 Web Server 的请求;而 worker 进程则一般有多个(具体数量根据实际需要配置),每个进程内部都嵌入了一个 PHP 解释器,是 PHP 代码真正执行的地方。
    • Nginx通过反向代理功能将动态请求转向后端Php-fpm。配置nginx.conf 支持php-fpm,当请求网站下php文件的时候,反向代理到php-fpm:
location ~ \.php$ {
include /usr/local/etc/nginx/fastcgi.conf; #加载nginx的fastcgi模块
fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9000; #nginx fastcgi进程监听的IP地址和端口
}
 
nginx与php-fpm的结合,完整的流程是这样的:
www.example.com
--> Nginx
--> 路由到www.example.com/index.php
--> 加载nginx的fast-cgi模块
--> fast-cgi监听127.0.0.1:9000地址
--> www.example.com/index.php请求到达127.0.0.1:9000
--> php-fpm 监听127.0.0.1:9000
--> php-fpm 接收到请求,启用worker进程处理请求
--> php-fpm 处理完请求,返回给nginx
--> nginx将结果通过http返回给浏览器
 
关于nginx.conf,主要由6个部分组成:
main:用于进行nginx全局信息的配置
events:用于nginx工作模式的配置
http:用于进行http协议信息的一些配置
server:用于进行服务器访问信息的配置
location:用于进行访问路由的配置
upstream:用于进行负载均衡的配置
主要的几个配置项:
worker_processes指定nginx要开启的子进程数量
worker_connections 指定最大可以同时接收的连接数量
multi_accept 配置指定nginx在收到一个新连接通知后尽可能多的接受更多的连接
keepalive_timeout 10:给客户端分配连接超时时间,服务器会在这个时间过后关闭连接
client_header_timeout 10:设置请求头的超时时间
client_body_timeout 10:设置请求体的超时时间
send_timeout 10:指定客户端响应超时时间
access_log logs/access.log:设置存储访问记录的日志
error_log logs/error.log:设置存储记录错误发生的日志
gzip 是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量。
gzip_disable 为指定的客户端禁用gzip功能。
open_file_cache 打开缓存的同时也指定了缓存最大数目,以及缓存的时间。
 
Nginx缓存的配置:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
//防盗链设置
valid_referers none blocked imooc.com *.imooc.com;
if ($invalid_referer)
{
#return 403;
rewrite ^/ https://www.baidu.com/img/bd_logo1.png;
}
//加密签名
accesskey on;
accesskey_hashmethod md5;
accesskey_arg sign;
accesskey_signature "jason$remote_addr”;
//过期时间
expires 30d;
etag off;
add_header cache-control max-age=3600 ;
}
 
关于“正向代理” 和 “反向代理”:
访问google,需要FQ(VPN),对于人来说可以感知到,但服务器感知不到的服务器,我们叫他正向代理服务器。
访问baidu,baidu自己有一个代理服务器用来做负载均衡,路由到不同的server。对于人来说不可感知,但对于服务器来说是可以感知的,我们叫他反向代理服务器
 
nginx负载均衡:
配置Nginx负载均衡,在nginx.conf 添加下面这段backend,可以自由命名:
upstream backend {
   #添加服务器到负载均衡
    server 192.168.1.252;
server 192.168.1.251 weight=2;#设置该服务器在负载均衡中的权重 默认为1;越高则访问的频次越大
server 192.168.1.252 down; #表示down掉这台服务器,不参与负载均衡
server 192.168.1.247 backup; #备用服务器 当其他服务器很忙或者down掉之后才会启动这台的
}
#配置参数
#max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
#fail_timeout:max_fails次失败后,暂停的时间。
server {
listen 80;
server_name localhost;
location / {
#反向代理的地址
proxy_pass http://backend;
}
}
 
 
这样子就已经配置完成了,访问localhost,如果三台服务器能轮询切换就证明配置成功。
 
Nginx配置虚拟主机:
nginx.conf 每一个server {listen 80; server_name www.a.com; ..... } 就表示一台虚拟域名,
 
Nginx列出文件目录列表
nginx默认是不允许列出整个目录的,开启目录列表:打开nginx.conf文件,
在location server 或 http段中加入:
autoindex on;//自动显示目录
autoindex_exact_size off;//人性化方式显示文件大小否则以byte显示
autoindex_localtime on;//按服务器时间显示,否则以gmt时间显示
 
Nginx与Apache的优缺点比较?
(1)最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;
nginx是异步的,多个连接(万级别)可以对应一个进程。
nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的。
(2) 在高并发下nginx 能保持 低资源、低消耗、高性能。
(3) apache 相对于nginx 的优点: rewrite ,比nginx 的rewrite 强大。
 
Apache 与 Nginx 区别
nginx 相对 apache 的优点:
轻量级,同样是web 服务,比apache 占用更少的内存及资源
抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
高度模块化的设计,编写模块相对简单
apache 相对nginx 的优点:
rewrite ,比nginx 的rewrite 强大
超稳定,少bug ,nginx 的bug 相对较多
 
Apache设置二级域名和虚拟主机,在httpd.conf的最后:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.a.com
DocumentRoot "D:/www"
</VirtualHost>
<Directory "D:/www" >
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Options FollowSymLinks 表示不列出目录下的文件,
如果要列出文件列表,则使用 Options Indexes FollowSymLinks。
 
posted @ 2019-05-23 16:56  浮尘微光  阅读(640)  评论(0编辑  收藏  举报