2018-9-18 直播课堂笔记

经历了前面LAMP的一个学习,经过一个小测验我也找到了一些问题,需要改进的地方还有很多,后面才进入实战课程,需要继续坚持,还要更加努力!

1.LNMP

1.1 什么 是LNMP

1.2 LNMP与LAMP区别

1.2.1 lnmp和lamp安装上的不同

2.HTTP配置文件与Nginx配置文件详解

2.1 http配置文件http.conf

2.2 Nginx配置文件详解

2.3  nginx.conf server部分配置

3.同步与异步机制 阻塞与非阻塞

3.1同步机制与异步机制

3.2 阻塞与非阻塞

4. CGI,FastCGI,PHP-CGI与PHP-FPM


 

1.LNMP

1.1 什么 是LNMP

用户通过浏览器输入域名请求nginx web服务,如果请求时静态资源,则由nginx解析返回给用户;如果是动态请求(.php结尾),那么nginx就会把它通过FastCGI接口(生产常用方法)发送给PHP引擎服务(FastCGI进程php-fpm)进行解析,如果这个动态请求要读取数据库数据,那么,PHP就会继续向后请求MYSQL数据库,以读取需要的数据,并最终通过Nginx服务把获取的数据返回给用户,这就是LNMP环境的基本请求顺序流程.

1.2 LNMP与LAMP区别

1.2.1 lnmp和lamp安装上的不同

生产环境中,可能会遇到lamp架构与lnmp架构都在同一台物理服务器的环境,此时

若php版本高于5.4,则直接编译php支持mod方式和php-cgi方式,也就是我们在LNMP中编译安装的过程

若php版本不高于5.4,就应该剔除enable-fpm模式,也就是我们在LAMP中编译的过程

,apapche是通过模块方式与php互通,而nginx是通过fastcgi互通,所以在php的编译安装上也是因为这层关系,编译参数上有些不同,apache的编译参数相比nginx编译参数缩减了

--enable-fpm
--with-fpm-user=www 
--with-fpm-group=www

增加了

--with-apxs2=/application/apache/bin/apxs

1.2.2 lamp和lnmp都是用来运行php网站的。 一个是apache,一个是nginx,在lamp中,php是作为apache的一个模块,被apache加载并调用。 当处理php脚本时,是由apache来完成的,而实际上我们应该说是apache的模块libphp5.so 处理的。

nginx就不一样了,nginx后面有php-fpm服务,这个php-fpm服务作为独立的服务存在,可以监听ip:port 也可以监听socket,真正处理php脚本的工作是由php-fpm来完成的,而nginx仅仅是把用户的请求发给php-fpm,然后再把php-fpm的处理结果发给用户。

apache因为把php模块集于一身成为一个整体,任何请求访问(静态,动态)都是apache(httpd)自己搞定的, 而nginx仅仅是一个传递的角色。它可以处理静态(图片,js,css等),但php相关的就得由后面的php-fpm来处理。

2.HTTP配置文件与Nginx配置文件详解

2.1 http配置文件http.conf

一般这种配置文件路径在:/usr/local/apache2.4/conf/httpd.conf

# MIME-Type
include       mime.types;  //cat conf/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配置块中定义。

#keepalive_timeout 65 60;
该参数有两个值,第一个值设置nginx服务器与客户端会话结束后仍旧保持连接的最长时间,单位是秒,默认为75s。
第二个值可以省略,它是针对客户端的浏览器来设置的,可以通过curl -I看到header信息中有一项Keep-Alive: timeout=60,如果不设置就没有这一项。
第二个数值设置后,浏览器就会根据这个数值决定何时主动关闭连接,Nginx服务器就不操心了。但有的浏览器并不认可该参数。

#send_timeout
这个超时时间是发送响应的超时时间,即Nginx服务器向客户端发送了数据包,但客户端一直没有去接收这个数据包。
如果某个连接超过send_timeout定义的超时时间,那么Nginx将会关闭这个连接。

#gzip_comp_level 6;
gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)

2.2 Nginx配置文件详解

nginx.conf全局配置
#user nobody;
定义运行nginx服务的用户,还可以加上组,如 user nobody nobody;
#worker_processes 1;
定义nginx子进程数量,即提供服务的进程数量,该数值建议和服务cpu核数保持一致。
除了可以定义数字外,还可以定义为auto,表示让系统自动调整。
#error_log logs/error.log;
定义错误日志的路径,可以是相对路径(相对prefix路径的),也可以是绝对路径。
该配置可以在此处定义,也可以定义到http、server、location里
#error_log logs/error.log notice;
定义错误日志路径以及日志级别.
错误日志级别:常见的错误日志级别有[debug|info|notice|warn|error|crit|alert|emerg],级别越高记录的信息越少。
如果不定义默认是error
#pid logs/nginx.pid;
定义nginx进程pid文件所在路径,可以是相对路径,也可以是绝对路径。
#worker_rlimit_nofile 100000;
定义nginx最多打开文件数限制。如果没设置的话,这个值为操作系统(ulimit -n)的限制保持一致。
把这个值设高,nginx就不会有“too many open files”问题了。

2.3  nginx.conf server部分配置

 server {
    listen       80;  //监听端口为80,可以自定义其他端口,也可以加上IP地址,如,listen 127.0.0.1:8080;
    server_name  localhost; //定义网站域名,可以写多个,用空格分隔。
    #charset koi8-r; //定义网站的字符集,一般不设置,而是在网页代码中设置。
    #access_log  logs/host.access.log  main; //定义访问日志,可以针对每一个server(即每一个站点)设置它们自己的访问日志。

    ##在server{}里有很多location配置段
    location / {
        root   html;  //定义网站根目录,目录可以是相对路径也可以是绝对路径。
        index  index.html index.htm; //定义站点的默认页。
    }

    #error_page  404              /404.html;  //定义404页面

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;  //当状态码为500、502、503、504时,则访问50x.html
    location = /50x.html {
        root   html;  //定义50x.html所在路径
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #定义访问php脚本时,将会执行本location{}部分指令
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;  //proxy_pass后面指定要访问的url链接,用proxy_pass实现代理。
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;  //定义FastCGI服务器监听端口与地址,支持两种形式,1 IP:Port, 2 unix:/path/to/sockt
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;  //定义SCRIPT_FILENAME变量,后面的路径/scripts为上面的root指定的目录
    #    include        fastcgi_params; //引用prefix/conf/fastcgi_params文件,该文件定义了fastcgi相关的变量
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    # 
    #location ~ /\.ht {   //访问的url中,以/.ht开头的,如,www.example.com/.htaccess,会被拒绝,返回403状态码。
    #    deny  all;  //这里的all指的是所有的请求。
    #}
}


# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
#    listen       8000;  //监听8000端口
#    listen       somename:8080;  //指定ip:port
#    server_name  somename  alias  another.alias;  //指定多个server_name

#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}


# HTTPS server
#
#server {
#    listen       443 ssl;  //监听443端口,即ssl
#    server_name  localhost;

### 以下为ssl相关配置
#    ssl_certificate      cert.pem;    //指定pem文件路径
#    ssl_certificate_key  cert.key;  //指定key文件路径

#    ssl_session_cache    shared:SSL:1m;  //指定session cache大小
#    ssl_session_timeout  5m;  //指定session超时时间
#    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;   //指定ssl协议
#    ssl_ciphers  HIGH:!aNULL:!MD5;  //指定ssl算法
#    ssl_prefer_server_ciphers  on;  //优先采取服务器算法
#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}

3.同步与异步机制 阻塞与非阻塞

3.1同步机制与异步机制

  同步、异步发生在当客户端发起请求后,服务端处理客户端的请求时。

  •   同步机制,是指客户端发送请求后,需要等待服务端(内核)返回信息后,再继续发送下一个请求。  在同步机制中,所有的请求在服务器端得到同步,即发送方和接收方对请求的处理步调是一致的。
  • 异步机制,是指客户端发出一个请求后,不等待服务端(内核)返回信息,就继续发送下一个请求。在异步机制中,所有来自发送方的请求形成一个队列,接收方处理完后再通知发送方。

举例:一家酒店前台,在旺季的高峰时间段会接很多预定酒席的电话。
如果是同步机制情况下,前台每接一个电话后先不挂掉电话,而是去查询有无剩余酒席,查到结果后,告诉客户。
如果是异步机制情况下,前台每接一个预定电话直接回复客户,一会回复,此时前台把查询这件事情交给了另外的同事,
该前台挂掉电话后,继续处理其他客户的事情,当另外的同事查询到结果后再通知给前台,前台再通知客户。

3.2 阻塞与非阻塞

阻塞与非阻塞发生在IO调度中,比如内核到磁盘IO。
阻塞方式下,进程/线程在获取最终结果之前,被系统挂起了,也就是所谓的阻塞了,在阻塞过程中该进程什么都干不了,
直到最终结果反馈给它时,它才恢复运行状态。
非阻塞
非阻塞方式和阻塞相反,进程/线程在获取最终结果之前,并没有进入被挂起的状态,而是该进程可以继续执行新的任务。
当有最终结果反馈给该进程时,它再把结果交给客户端。

举例:依然是酒店前台接待预定酒席电话的案例。
此时角色不再是前台,而是她的查询有无剩余酒席的同事。如果是阻塞方式,该同事在查询有无剩余酒席的过程中,需要傻傻地
等待酒店管理系统给他返回结果,在此期间不能做其他事情。
如果是非阻塞,该同事在等待酒店管理系统给他返回结果这段时间,可以做其他事情,比如可以通知前台剩余酒席的情况。
Nginx的请求机制
Nginx之所以可以支持高并发,是因为Nginx用的是异步非阻塞的机制,而Nginx是靠事件驱动模型来实现这种机制的。

在Nginx的事件驱动模型下,客户端发起的所有请求在服务端都会被标记为一个事件,Nginx会把这些事件收集到“事件收集器”里,
然后再把这些事件交给内核去处理。

4. CGI,FastCGI,PHP-CGI与PHP-FPM

  • CGI:是 Web Server 与 Web Application 之间数据交换的一种协议。
  • FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。同样,SCGI 协议与 FastCGI 类似。
  • PHP-CGI:是 PHP (Web Application)对 Web Server 提供的 CGI 协议的接口程序。
  • PHP-FPM:是 PHP(Web Application)对 Web Server 提供的 FastCGI 协议的接口程序,额外还提供了相对智能一些任务管理。

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值