查看: 7377|回复: 0

关于Nginx的安装及部分配置的分享

[复制链接]

2

主题

2

帖子

16

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
16
发表于 2017-1-6 14:35:42 | 显示全部楼层 |阅读模式
本帖最后由 shawn 于 2017-1-6 14:43 编辑

1. nginx技术分享
介绍:
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

方面:   优势,  安装,  配置,  使用
2. 优势
nginx1.png
反向代理:
    通俗点讲, 反向代理就是网站通过一台服务器发布到公网,供用户访问。用户直接访问那台反向代理服务器,然后通过那台服务器访问到网站。用户无法得到网站的真实IP地址。这样就保护了网站服务器,如果您有台服务器在国内又不想让人找到IP,就可以在国外搭建一台反向代理服务器。一个反向代理服务器将很多网站解析到同一 ip地址上。
负载均衡:
    因为有了反向代理, 所以能实现负载均衡, 负载均衡就是把命令转发到不同的服务器上,均衡各个服务器所收到的请求, 缓解服务器压力. nginx在这点上做的很好, 一般的分布式负载均衡用的是轮询的方式.
    简单的轮询就是每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除, 找下一个服务器请求.

Rewrite重写规则:
下面介绍

内存消耗:
非常小, 因为其内在模块或加载模块并没有apache多, 所以占用内存比apache低, 并且apache对每个请求都会创建线程, 导致cpu和内存的产生更多开销.

高并发处理:
Nginx 不同于 Apache2 的一点就是,Nginx 采用单线程,非阻塞,异步 IO 的工作模型。
Apache2 对于每一个请求,都会创建一个新进程或线程,会浪费很多内存和 CPU 时间,而 Nginx 使用操作系统提供的IO多路复用技术(epoll), 在一个线程中处理所有的请求。当一个 IO 操作开始的时候,Nginx 不会等待操作完成就会去处理下一个请求,等到某个 IO 操作完成后,Nginx 再回过头去处理这次 IO 的后续工作。

3. 安装
几个概念:
PHP解释器的执行, 主要有三种模式: mod_php    CGI    FastCGI
1. mod_php 是Apache 的一个模块,把PHP 解释器嵌入到Apache 进程中。
2. CGI 和FastCGI 分别是一种协议。Web Server 实现了CGI 或FastCGI 协议的相应的应用程序(以下简称CGI 或FastCGI),就可以启动PHP 解释器处理PHP 请求。它们都是以独立进程的形式存在。
3. mod_php 和FastCGI 在 单个进程中可以处理多个请求,CGI 在单个进程中只能处理一个请求。

php-cgi 是一种CGI 协议的实现。
  • php-cgi 其实就是PHP 解析器。
  • 在CGI 模式时,当Web Server 收到 xx/index.php 请求时,会启动php-cgi,php-cgi 会解析php.ini 文件,初始化环境,然后根据请求参数进行处理,再返回处理后的结果。(都是以CGI 协议规范来进行)
  • php-cgi 在每个请求时都会启动一个进程,然后读取php.ini 进行解析,可想而知效率相对比较低。
  • php-cgi 无法实现平滑重启。修改php.ini 配置后,后面启动的php-cgi 程序还是不会感知。

php-fpm 即FastCGI Process Management,是一种FastCGI 协议的实现。
  • 当请求到来时,php-fpm 启动并读取php.ini 文件完成初始化环境,然后启动一个主进程,再启动多个子进程。当请求过来时,主进程会传递给一个子进程,然后等待下一个请求。php-fpm 会动态配置子进程的数量。
  • 一个php-fpm 进程可以处理多个请求,会启动多个php-cgi 程序。
  • php-fpm 可以实现平衡重启。修改php.ini 后,当启用新的子进程会使用新的配置。

下载所需库:   pcre,  zlib,  openssl 等等
centos类:          yum install nginx                         yum install php php-fpm
ubuntu类:            sudo apt-get install nginx
                            sudo apt-get install php php-fpm
chkconfig nginx on

编译安装:
下载tar安装包
常用参数:
--prefix=PATH:指定 nginx 的安装目录
--conf-path=PATH:指定 nginx.conf 配置文件路径
--user=NAME:nginx 工作进程的用户
--with-pcre:开启 PCRE 正则表达式的支持
--with-http_ssl_module:启动 SSL 的支持
--with-http_stub_status_module:用于监控 Nginx 的状态
--with-http-realip_module:允许改变客户端请求头中客户端 IP 地址
--with-file-aio:启用 File AIO
--add-module=PATH:添加第三方外部模块
然后 make && make install

编译安装php时, Configure时有个参数 --enable-fpm是用来安装php-fpm的.


4. 配置

语法规则: location [=|~|~*|^~] /uri/ { … }
= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
~ 开头表示区分大小写的正则匹配
~*  开头表示不区分大小写的正则匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。

解析php文件:
location / {
    root  /var/www;
    index  index.php index.html index.htm;
}
location ~ \.php$ {
    root /var/www;
    fastcgi_pass 127.0.0.1:9000
    fastcgi_index index.php
    fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
    include fastcgi_params;
}

隐藏index.php:
location /{        
    if (!-e $request_filename) {                                  // !-e 判断是否在文件或目录               
        rewrite ^(.*)$ /index.php/$1 last;                // 重写url, 隐藏index.php               
        break;                                                        // 终止匹配        
    }
}

JS和CSS缓存时间设置:
location ~ .*.(js|css)?$
{
    expires 1h;
}

图片缓存时间设置:
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires 10d;
}

虚拟主机:
server {
  listen 80;
  server_name www.xxx.com;
  index index.html;
  root /var/xxx;
}

定义本虚拟主机的访问日志:
access_log /var/log/nginx/ha97access.log access;

错误页面:
error_page 404 /404.html;
error_page的第二个参数是URI, 即相对于站点根目录的路径,并非物理路径

nginx进程数,建议设置为等于CPU总核心数:
worker_processes 8;

一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致:
worker_rlimit_nofile 65535;

单个进程最大连接数(最大连接数=连接数*进程数):
worker_connections 65535;

全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]:
error_log /var/log/nginx/error.log info;

5. 使用
service nginx  start/stop/restart      启动和停止
如果修改了php的配置, 重启nginx是没有用的, 要重启php-fpm, php-fpm在安装php时可以进行安装






回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表