移至我原来的简书主页https://www.jianshu.com/p/d51...Nginx是一个轻量级的web服务器和反向代理服务器。与Apache、lighttpd相比,具有内存少、稳定性高等优点。它最常见的用途是提供反向代理服务。Centos下安装,yum源不提供nginx安装,切换yum源即可获取安装。目前很多系统像centos7都已经有这些库了,安装前可以查看本地是否存在。如果有,直接跳到第四步。需要使用安装包编译安装,如下。以下命令需要以root权限执行:首先安装必要的库(nginx中的gzip模块需要zlib库,rewrite模块需要pcre库,ssl功能需要openssl库)。选择/usr/local作为安装目录,后面具体版本号会根据实际情况更改。1.安装PCRE库$cd/usr/local/$sudowgetftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz$sudotar-zxvfpcre-8.36.tar.gz$cdpcre-8.36$sudo./configure$sudomake$sudomakeinstall2.安装zlib库$cd/usr/local/$sudowgethttp://zlib.net/zlib-1.2.8.tar.gz$sudotar-zxvfzlib-1.2.8.tar.gz$cdzlib-1.2.8$sudo./configure$sudomake$sudomakeinstall3.installssl$cd/usr/local/$sudowgethttp://www.openssl.org/source/openssl-1.0.1j.tar.gz$sudotar-zxvfopenssl-1.0.1j.tar.gz$sudo./config$sudomake$sudomakeinstall4.安装nginx$cd/usr/local/$sudowgethttp://nginx.org/download/nginx-1.8.0.tar.gz$sudotar-zxvfnginx-1.8.0.tar.gz$cdnginx-1.8.0$sudo./configure--prefix=/usr/local/nginx#这一步需要根据需要添加编译参数,如下$sudomake$sudomakeinstall如果以上依赖使用安装包编译需要在--前缀后面接以下命令:--with-pcre=/usr/local/pcre-8.36指的是pcre-8.36的源码路径。--with-zlib=/usr/local/zlib-1.2.8指的是zlib-1.2.8的源码路径。5.开始测试配置文件是否正确:$/usr/local/nginx/sbin/nginx-t如果没有问题,可以开始:$/usr/local/nginx/sbin/nginx来检查配置文件是否正确启动成功:打开浏览器访问本机的IP。如果浏览器显示Welcometonginx!,则表示Nginx已经安装并运行成功。部分命令如下:重启:$/usr/local/nginx/sbin/nginx–sreload停止:$/usr/local/nginx/sbin/nginx–sstop测试配置文件是否正常:$/usr/local/nginx/sbin/nginx–t强制关机:$pkillnginxconfiguration以上安装方法nginx配置文件位于/usr/local/nginx/conf/nginx.confNginx配置文件常见结构为“http””server""fromoutsidetoinside"location"等,默认的继承关系是从外到内,也就是说内块会自动获取外块的值作为默认值。Server所在的服务器接收到请求需要按照规则将不同的请求转发到不同的后端服务器,在nginx中我们可以通过构建虚拟主机(server)的概念来隔离这些不同的服务配置server{listen80;server_namelocalhost;roothtml;indexindex.htmlindex.htm;}比如我们笔战下的两个子项目passport和wan可以在nginx配置文件中配置两个服务器,服务器名分别为passport.bigertech.com和wan.bigertech.com。这样不同的url请求就会对应nginx的相应设置,转发到不同的后端服务器。这里的listen指的是监听端口,server_name用来指定IP或者域名,多个域名之间可以用空格隔开对应统一的规则,index用来设置访问的默认主页地址,root命令用于指定虚拟主机的网页和目录。它可以是相对地址或绝对地址。通常我们可以在nginx.conf中配置多个服务器来设置不同的请求。像这样:server{listen80;服务器名称主机1;根HTML;indexindex.htmlindex.htm;}服务器{听80;服务器名称主机2;根/数据/www/html;indexindex.htmlindex.htm;}但是当服务器数量超过2台时,建议将不同虚拟主机的配置放在另一个文件中,然后通过在主配置文件nginx.conf中加入include命令来包含。更易于管理。包括虚拟主机/*.conf;您可以包含虚拟主机的所有文件。Localtion每一个url请求都会对应一个服务,nginx会对其进行处理转发,或者是本地的文件路径,或者是其他服务器的服务路径。而这个路径的匹配是通过location来进行的。我们可以把server看成是一个域名对应的配置,location是在域名下配置一个更细的路径。以上面的例子,可以把root和index命令放在一个location中,只有匹配到location的时候,才会访问root之后的内容:location/{root/data/www/host2;索引index.html索引。htm;}location匹配规则~波浪线表示进行正则匹配,区分大小写~*表示进行正则匹配,不区分大小写^~^~表示匹配普通字符,如果该选项匹配,则只匹配该选项,not匹配其他选项,一般用于匹配directory=普通字符的精确匹配匹配示例:location=/{#只匹配“/”。[configurationA]}location/{#匹配任何请求,因为所有请求都以“/”开头#但较长的字符匹配或正则表达式匹配将首先匹配[configurationB]}location^~/images/{#匹配任何请求以/images/开头,停止匹配其他位置[配置C]}location~*\.(gif|jpg|jpeg)${#匹配以gif、jpg或jpeg结尾的请求。#但所有对/images/目录的请求都将由[ConfigurationC]处理。[configurationD]}请求:/->符合配置A/documents/document.html->符合配置B/images/1.gif->符合配置C/documents/1.jpg->符合配置D静态文件映射访问文件的配置主要包括root和aliasp的两个指令。这两条指令的区别很容易混淆:aliasalias后面的指定目录是准确的,最后必须加/。位置/c/{别名/a/;如果您访问站点http://location/c,您将访问/a....rootroot后面的指定目录为上级目录,上级目录必须包含与location后指定名称同名的目录。位置/c/{根目录/a/;}然后访问站点http://location/c访问/a....如果需要扩展这个目录,只需添加“autoindexon;”在这个位置的尽头。转发配置非常简单。比如我想把所有请求都转到一台真正提供服务的机器的8001端口,只要这样:location/{proxy_pass172.16.1.1:8001;}这种方式访问??主机时,就会被转发到172.16.1.1的8001端口。负载平衡上游myserver;{ip_hash;服务器172.16.1.1:8001;服务器172.16.1.2:8002;服务器172.16.1.3;server172.16.1.4;}location/{proxy_passhttp://myserver;}我们在upstream指定了一组机器,并将这组机器命名为myserver,这样在proxypass中,只要把请求转到myserver的upstream,我们在四台机器上实现了反向代理加负载均衡。其中的ip_hash表示我们的平衡方式是根据用户的ip地址来分配。此外,还有轮询、指定权重轮询、fair、url_hash等几种调度算法。总结以上就是通过nginx实现静态文件转发、反向代理和负载均衡的最简单的配置。nginx中的所有功能都是通过模块来实现的。比如我们在配置upstream时,使用的是upstream模块,而server和location则在http核心模块中。其他还有用于流量控制的limt模块和用于邮件的mail模块。https的ssl模块。它们的配置类似,详细的配置说明可以参考nginx模块文档。
