nginx安装配置

nginx安装配置

Nginx介绍

Engine X是一个高性能、高并发的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

Nginx优点

高并发:Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性。在连接高并发的情况下,Nginx是Apache服务器不错的替代品,能够支持高达 50,000 个并发连接数的响应。 
负载均衡器·:Nginx作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。
代理服务器:Nginx本身就是一个反向代理服务器,可支持邮件服务器代理以及http代理

nginx和apache对比

1.轻量级,同样起web 服务,比apache 占用更少的内存及资源 
2.抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
3.高度模块化的设计,编写模块相对简单
4.配置简洁易懂,正则配置让很多事情变得简单

编译安装nginx

安装所需环境包组: yum -y groupinstall "Development Tools" "Server Platform Development"
安装所需要依赖包: yum -y install pcre-devel openssl-devel zlib-devel

进入软件包根目录配置程序:./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio

编辑并安装:make && make install

###解释
安装目录路径为:/usr/local/nginx
配置文件路径为:/etc/nginx/nginx.conf
错误日志路径为:/var/log/nginx/error.log
访问日志路径为:/var/log/nginx/access.log
pid存放路径为:/var/run/nginx.pid
套接字文件路径为:/var/run/nginx.lock
指定用户和组为nginx 加载ssl模块

rpm安装配置

nginx官方rpm包下载地址:http://nginx.org/packages/centos/7/x86_64/RPMS/
我们这里下载的nginx-1.10.0-1.el7.ngx.x86_64
可以直接使用yum –y install nginx-1.10.0-1.el7.ngx.x86_64.rpm 可以解决依赖问题

查看程序安装信息:

1.png

主配置文件 /etc/nginx/nginx.conf

2.png

我们设置虚拟在/etc/nginx/conf.d/default.conf内设置
http{}--->server{}--->location{}
http{}字段内可以包含多个server{}字段   server{}内可以包含多个Location{}字段
service :定义虚拟主机
Location:定义访问规则
Location:匹配优先级:=, ^~, ~/~*,不带符号;

3.png

nginx默认程序存放路径为:/usr/share/nginx/html下面;使用ss -tnl查看80端口是否正常运行,如果主机之前安装有httpd服务请关闭或者更改其一端口即可;

Alias别名设置,仅能用于Location上下文 
4.png

定义客户请求的相关配置
设定保持链接的超时时长;0表示禁止长连接;默认为75s
keepalive_timeout timeout [header_timeout]
在一次长连接中所允许请求的资源的最大的数量,默认为100
keepalive_requests number;
对那种浏览器禁用长连接
keepalive_disable none | browser ...;
向客户端发送响应报文的超时时长,此处,是指两次写操作之间的间隔时长。
Send_timeout time;
用于接收客户端请求报文的body部分的缓存大小;默认为16k;超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置;
client_body_buffer_size size;
设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量;
client_body_temp_path path [level1 [level2 [level3]]];
16进制的数字;
client_body_temp_path path  /var/tmp/client_body  1 2 2
限制响应给客户端的传输速率,单位是bytes/second,0表示无限制;
limit_rate rate;
限制对指定的请求方法之外的其它方法的使用客户端;允许192.168.1.0使用GET请求方法,其他全部拒绝。
limit_except GET {
       allow 192.168.1.0/32;
       }
文件操作优化配置:
是否启用aio功能
Aio on|off | threads[=pool];
启用O_DIRECT标记,此处意味文件大于等于给定的大小时使用,例如directio 4m;
directio size | off;

open_file_cache off;
   open_file_cache max=N [inactive=time];
   nginx可以缓存以下三种信息:
       (1) 文件的描述符、文件大小和最近一次的修改时间;
       (2) 打开的目录结构;
       (3) 没有找到的或者没有权限访问的文件的相关信息;
max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现缓存管理;
inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_users指令所指定的次数的缓存项即为非活动项;

缓存项有效性的检查频率;默认为60s;
open_file_cache_valid time;
在open_file_cache指令的inactive参数指定的时长内,至少应该被命中多少次方可被归类为活动项;
open_file_cache_min_uses number;
是否缓存查找时发生错误的文件一类的信息;
open_file_cache_errors on | off;

用户访问权限设置:

5.png

实现基于用户的访问控制,使用basic机制进行用户认证;

6.png

7.png

ngx_http_stub_status_module模块输出nginx的基本状态信息; 
location /basic_status { 
stub_status; 
}

8.png

Active connections: 活动状态的连接数;
accepts:已经接受的客户端请求的总数;
handled:已经处理完成的客户端请求的总数;
requests:客户端发来的总的请求数;
Reading:处于读取客户端请求报文首部的连接的连接数;
Writing:处于向客户端发送响应报文过程中的连接数;
Waiting:处于等待客户端发出请求的空闲连接数;

ngx_http_rewrite_module模块;

9.png

注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,因此,隐含有循环机制;[flag]所表示的标志位用于控制此循环机制;
如果replacement是以http://或https://开头,则替换结果会直接以重向返回给客户端;
Flag标记:
last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环;
break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环;
redirect:重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头;返回302临时重定向 地址栏会显示跳转后的地址
permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;返回301永久重定向 地址栏会显示跳转后的地址
可以将重新记录存放于日志当中;rewrite_log on | off;
引入一个新的配置上下文;条件满足时,执行配置块中的配置指令:server,Location
if (condition) {…}

10.png

11.png

condition选项:
           比较操作符:
                   ==:模式匹配,精确匹配;
                   !=:模式不匹配,精确匹配;
                   ~:模式匹配,区分字符大小写;
                   ~*:模式匹配,不区分字符大小写;
                   !~:模式不匹配,区分字符大小写;
                   !~*:模式不匹配,不区分字符大小写;
       文件及目录存在性判断:
-f和!-f判断是否存在文件
-d和!-d判断是否存在目录
-e和!-e判断是否存在文件或目录
-x和!-x判断文件是否可执行

用户自定义变量:Set $variable value;
$args 此变量与请求行中的参数相等
$content_length 等于请求行的“Content_Length”的值。
$content_type 等同与请求头部的”Content_Type”的值
$document_root 等同于当前请求的root指令指定的值
$document_uri 与$uri一样
$host 与请求头部中“Host”行指定的值或是request到达的server的名字(没有Host行)一样
$limit_rate 允许限制的连接速率
$uri 等同于当前request中的URI,可不同于初始值,例如内部重定向时或使用index
$server_protocol 等同于request的协议,使用“HTTP/1.0”或“HTTP/1.1
$server_port 请求到达的服务器的端口号
$server_name 请求到达的服务器名
$server_addr request到达的server的ip,一般获得此变量的值的目的是进行系统调用。为了避免系统调用,有必要在listen指令中指明ip,并使用bind参数。
$request_uri 含有参数的完整的初始URI
$request_method 等同于request的method,通常是“GET”或“POST”
$request_filename 当前请求的文件的路径名,由root或alias和URIrequest组合而成
$request_body_file
$remote_user 等同于用户名,由ngx_http_auth_basic_module认证
$remote_port 客户端port
$remote_addr 客户端ip
$query_string 与$args一样
指定返回客户端代码:return 400;支持被返回的代码有:204400402 - 406408410411413416,和500 - 504

gzip压缩模块

Gzip:开启网站压缩功能:
Gzip on|off 开启
gzip_comp_level level;   压缩等级
gzip_min_length legth;   启用压缩功能的响应报文大小阈值;
gzip_proxied expired no-cache no-store private auth;  
nginx作为代理服务器接收到从被代理服务器发送的响应报文后,在何种条件下启用压缩功能的;
off:对代理的请求不启用
no-cache, no-storeprivate:表示从被代理服务器收到的响应报文首部的Cache-Control的值为此三者中任何一个,则启用压缩功能;
gzip_types mime-type ...;

   压缩过滤器,仅对此处设定的MIME类型的内容启用压缩功能;

12.png

客户端开启前效果:

13.png

客户端开启后效果:

14.png

ngx_http_fastcgi_module模块:

安装php 和php-fpm:yum –y install php php-fpm
编辑nginx配置文件:vim /etc/nginx/conf.d/vhosts.conf
location ~ \.php$
{
       root /usr/share/nginx/html/R1;
       fastcgi_pass   127.0.0.1:9000;
       fastcgi_index  index.php;
       fastcgi_param SCRIPT_FILENAME  /usr/share/nginx/html/R1$fastcgi_script_name;
       include        fastcgi_params;
}

使用nginx –t查看配置文件是否存在语法错误
启动nginx与php-fpm
systemctl start nginx
systemctl start php-fpm

浏览器查看效果

15.png

查看fpm运行状态

在/etc/php-fpm.d/www.conf里面开启pm_status和ping并设置location即可
通过/pm_status和/ping来获取fpm server状态信息;
           location ~* ^/(pm_status|ping)$ {
               include        fastcgi_params;
               fastcgi_pass 127.0.0.1:9000;
               fastcgi_param  SCRIPT_FILENAME  $fastcgi_script_name;
           }

效果图 :

nginx安装配置

nginx安装配置

定义fastcgi的缓存;缓存位置为磁盘上的文件系统,由path所指定路径来定义;

            levels=levels:缓存目录的层级数量,以及每一级的目录数量;levels=ONE:TWO:THREE
               leves=1:2:2
           keys_zone=name:size
               k/v映射的内存空间的名称及大小
           inactive=time
               非活动时长
           max_size=size
               磁盘上用于缓存数据的缓存空间上限

   fastcgi_cache zone | off;
       调用指定的缓存空间来缓存数据;http, server, location

   fastcgi_cache_key string;
       定义用作缓存项的key的字符串;

   fastcgi_cache_methods GET | HEAD | POST ...;
       为哪些请求方法使用缓存;

   fastcgi_cache_min_uses number;
       缓存空间中的缓存项在inactive定义的非活动时间内至少要被访问到此处所指定的次数方可被认作活动项;

   fastcgi_cache_valid [code ...] time;
       不同的响应码各自的缓存时长;

       示例:
           http {
               ...
               fastcgi_cache_path /var/cache/nginx/fastcgi_cache levels=1:2:1 keys_zone=fcgi:20m inactive=120s;
               ...
               server {
                   ...
                   location ~* \.php$ {
                       ...
                       fastcgi_cache fcgi;
                       fastcgi_cache_key $request_uri;
                       fastcgi_cache_valid 200 302 10m;
                       fastcgi_cache_valid 301 1h;
                       fastcgi_cache_valid any 1m;
                       ...
                   }
                   ...
               }
               ...
           }

原创文章,作者:闹钟哥,如若转载,请注明出处:http://www.178linux.com/58439

(0)
闹钟哥闹钟哥
上一篇 2016-11-08 00:07
下一篇 2016-11-08 14:30

相关推荐

  • redis-cli的一些有趣也很有用的功能

    redis-cli我们最常用的三个参数就是-h、-p、-a选项,分配用来指定连接的redis-server的host、port和登录密码。通过redis-cli –help发现,redis-cli还提供了其他很多的参数和功能。 1)-x-x选项从标准输入(stdin)读取最后一个参数。 比如从管道中读取输入: echo -en &quot…

    Linux干货 2016-04-13
  • iptables基础实战练习

    目录: 一、基本规则练习 二、SNAT源地址转移 三、DNAT目标地址转移   一、基础规则练习   (1) 放行ssh (端口:22) 1 iptables -A INPUT -d 192.168.42.153 -p tcp –dport 22 -j ACCEPT 2 iptables -A OUTPUT -s 192.168.42.…

    2017-08-04
  • Bash Shell语法之三函数简介

     Bash Shell语法之三函数简介 一、什么是Bash函数 像其他编程语言一样,Shell 也支持函数。Shell函数必须先定义后使用。函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高。 二、Bash函数定义格式 [ function ] fun () {     &nb…

    Linux干货 2015-05-11
  • 26期全程班-第一周博客作业

    1、描述计算机的组成与功能。 计算机由以下五大单元组成: 一:CPU的算法计算和逻辑判断单元; 二:CPU的控制单元;协调各设备协同工作。 三:内存:RAM(random accace memory)随机读取内存;数据处理的必经路段。 四:输入设备:键盘、鼠标等;负责数据的输入。 五:输出设备:屏幕、终端、文件、硬盘等;负责数据的输出 2、按系列罗列Linu…

    Linux干货 2016-12-30
  • HipHop PHP实战(详解web运行模式)

    Note: These code examples assume the HipHop compiler is fully built. 1 . Setting Up Your Environment (构建环境) To get started, you need to configure two environment variables. cd…

    Linux干货 2015-04-10
  • 马哥教育网络班22期第二周课程练习1-未闻花名

    1、Linux管理文件和目录的命令 命令 功能 命令 功能 pwd 显示当前目录 ls 查看目录下的内容 cd 改变所在目录 cat 显示文件的内容 grep 在文件中查找某字符 cp 复制文件 touch 创建文件 mv 移动文件 rm 删除文件 rmdir 删除目录 1.1 pwd命令 该命令的英文解释为print working directory(打…

    Linux干货 2016-08-29