Nginx是一款轻量级的网页服务器、反向代理服务器。相较于Apache、lighttpd具备占有内存少,稳定性高等优点。它最常的用途是提供反向代理服务。html
在Centos下,yum源不提供nginx的安装,能够经过切换yum源的方法获取安装。也能够经过直接下载安装包的方法,如下命令均需root权限执行:nginx
首先安装必要的库(nginx 中gzip模块须要 zlib 库,rewrite模块须要 pcre 库,ssl 功能须要openssl库)。选定/usr/local为安装目录,如下具体版本号根据实际改变。正则表达式
1.安装PCRE库算法
$ cd /usr/local/ $ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz $ tar -zxvf pcre-8.36.tar.gz $ cd pcre-8.36 $ ./configure $ make $ make install
2.安装zlib库后端
$ cd /usr/local/ $ wget http://zlib.net/zlib-1.2.8.tar.gz $ tar -zxvf zlib-1.2.8.tar.gz $ cd zlib-1.2.8 $ ./configure $ make $ make install
3.安装ssl浏览器
$ cd /usr/local/ $ wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz $ tar -zxvf openssl-1.0.1j.tar.gz $ ./config $ make $ make install
4.安装nginx服务器
$ cd /usr/local/ $ wget http://nginx.org/download/nginx-1.8.0.tar.gz $ tar -zxvf nginx-1.8.0.tar.gz $ cd nginx-1.8.0 $ ./configure --prefix=/usr/local/nginx $ make $ make install
在--prefix后面接如下命令:负载均衡
--with-pcre=/usr/local/pcre-8.36 指的是pcre-8.36 的源码路径。 --with-zlib=/usr/local/zlib-1.2.8 指的是zlib-1.2.8 的源码路径。
5.启动url
$ /usr/local/nginx/sbin/nginx
检查是否启动成功:
打开浏览器访问此机器的 IP,若是浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。
部分命令以下:
重启:
$ /usr/local/nginx/sbin/nginx –s reload
中止:
$ /usr/local/nginx/sbin/nginx –s stop
测试配置文件是否正常:
$ /usr/local/nginx/sbin/nginx –t
强制关闭:
$ pkill nginx
以上安装方法nginx的配置文件位于
/usr/local/nginx/conf/nginx.conf
Nginx配置文件常见结构的从外到内依次是「http」「server」「location」等等,缺省的继承关系是从外到内,也就是说内层块会自动获取外层块的值做为缺省值。
接收请求的服务器须要将不一样的请求按规则转发到不一样的后端服务器上,在 nginx 中咱们能够经过构建虚拟主机(server)的概念来将这些不一样的服务配置隔离。
server { listen 80; server_name localhost; root html; index index.html index.htm; }
例如咱们笔戈玩下的两个子项目 passport 和 wan 就能够经过在 nginx 的配置文件中配置两个 server,servername 分别为 passport.bigertech.com 和 wan.bigertech.com。这样的话不一样的 url 请求就会对应到 nginx 相应的设置,转发到不一样的后端服务器上。
这里的 listen 指监听端口,server_name 用来指定IP或域名,多个域名对应统一规则能够空格分开,index 用于设定访问的默认首页地址,root 指令用于指定虚拟主机的网页跟目录,这个地方能够是相对地址也能够是绝对地址。
一般状况下咱们能够在 nginx.conf 中配置多个server,对不一样的请求进行设置。就像这样:
server { listen 80; server_name host1; root html; index index.html index.htm; } server { listen 80; server_name host2; root /data/www/html; index index.html index.htm; }
可是当 server 超过2个时,建议将不一样对虚拟主机的配置放在另外一个文件中,而后经过在主配置文件 nginx.conf 加上 include 指令包含进来。更便于管理。
include vhosts/*.conf;
就能够把vhosts的文件都包含进去啦。
每一个 url 请求都会对应的一个服务,nginx 进行处理转发或者是本地的一个文件路径,或者是其余服务器的一个服务路径。而这个路径的匹配是经过 location 来进行的。咱们能够将 server 当作对应一个域名进行的配置,而 location 是在一个域名下对更精细的路径进行配置。
以上面的例子,能够将root和index指令放到一个location中,那么只有在匹配到这个location时才会访问root后的内容:
location / { root /data/www/host2; index index.html index.htm; }
location 匹配规则
~ 波浪线表示执行一个正则匹配,区分大小写 ~* 表示执行一个正则匹配,不区分大小写 ^~ ^~表示普通字符匹配,若是该选项匹配,只匹配该选项,不匹配别的选项,通常用来匹配目录 = 进行普通字符精确匹配
匹配例子:
location = / { # 只匹配"/". [ configuration A ] } location / { # 匹配任何请求,由于全部请求都是以"/"开始 # 可是更长字符匹配或者正则表达式匹配会优先匹配 [ configuration B ] } location ^~ /images/ { # 匹配任何以 /images/ 开始的请求,并中止匹配 其它location [ configuration C ] } location ~* \.(gif|jpg|jpeg)$ { # 匹配以 gif, jpg, or jpeg结尾的请求. # 可是全部 /images/ 目录的请求将由 [Configuration C]处理. [ configuration D ] } 请求: / -> 符合configuration A /documents/document.html -> 符合configuration B /images/1.gif -> 符合configuration C /documents/1.jpg ->符合 configuration D
访问文件的配置主要有 root 和 aliasp's 两个指令。这两个指令的区别容易弄混:
alias后跟的指定目录是准确的,而且末尾必须加 /。
location /c/ { alias /a/; }
若是访问站点http://location/c访问的就是/a/目录下的站点信息。
root后跟的指定目录是上级目录,而且该上级目录下要含有和location后指定名称的同名目录才行。
location /c/ { root /a/; }
这时访问站点http://location/c访问的就是/a/c目录下的站点信息。
若是你须要将这个目录展开,在这个location的末尾加上「autoindex on; 」就能够了
配置起来很简单好比我要将全部的请求到转移到真正提供服务的一台机器的 8001 端口,只要这样:
location / { proxy_pass 172.16.1.1:8001; }
这样访问host时,就都被转发到 172.16.1.1的8001端口去了。
upstream myserver; { ip_hash; server 172.16.1.1:8001; server 172.16.1.2:8002; server 172.16.1.3; server 172.16.1.4; } location / { proxy_pass http://myserver; }
咱们在 upstream 中指定了一组机器,并将这个组命名为 myserver,这样在 proxypass 中只要将请求转移到 myserver 这个 upstream 中咱们就实现了在四台机器的反向代理加负载均衡。其中的 ip_hash 指明了咱们均衡的方式是按照用户的 ip 地址进行分配。另外还有轮询、指定权重轮询、fair、url_hash几种调度算法。
以上是最简单的经过 nginx 实现静态文件转发、反向代理和负载均衡的配置。在 nginx 中全部的功能都是经过模块来实现的,好比当咱们配置 upstream 时是用 upstream 模块,而 server 和 location 是在 http core 模块,其余的还有流控的 limt 模块,邮件的 mail 模块,https 的 ssl 模块。他们的配置都是相似的能够再 nginx 的模块文档中找到详细的配置说明。
做者:chrisxlq连接:http://www.jianshu.com/p/d5114a2a2052來源:简书著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。