简书IT阿里云CentOS 个人网站环境搭建程序员

阿里云 CentOS 环境搭建[3] -- Nginx

2017-06-25  本文已影响64人  SongHuitang丨赛萌
 Note:任何形式的转载请注明原文

本文指令都是按管理员权限执行,如果遇到权限问题请sudo


Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。

HTTP请求是80端口,但是在Linux上非root权限是无法使用1024以下端口的,并且因为安全原因,最好不要使用root权限登录服务器,所以无法直接用node.jsTomcat程序监听80端口。因此我们需要使用Nginx给我们的程序做反向代理,将80端口指向应用程序监听的端口(如node.js默认3000端口,Tomcat 默认8080端口)。


安装Nginx

配置Nginx源

vim /etc/yum.repos.d/nginx.repo

敲击i输入下面代码,按Esc并输入:wq!保存退出

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

通过yum安装Nginx

yum install nginx

启动 / 重启 Nginx

systemctl start nginx
systemctl restart nginx

修改配置文件

样例配置

server {
    listen       80;
    server_name  localhost;
    root   html;
    index  index.html index.htm;
    location /favicon.ico {
        root html;
    }
}

这里的 listen 指监听端口,server_name 用来指定IP或域名,多个域名对应统一规则可以空格分开,index 用于设定访问的默认首页地址,root 指令用于指定虚拟主机的网页跟目录,这个地方可以是相对地址也可以是绝对地址。

当用户访问localhost/favicon.ico时,会寻找nginx安装目录/html/favicon.ico

通常情况下我们可以在 nginx.conf 中配置多个server,对不同的请求进行设置。

  server {
          listen       80;
          server_name  www.a.com;
          charset utf-8;
          access_log  /home/a.com.access.log  main;
          location / {
              proxy_pass http://127.0.0.1:3000;
          }
      }
  
   server {
          listen       80;
          server_name  www.b.com;
          charset utf-8;
          access_log  /home/b.com.access.log  main;
          location / {
              proxy_pass http://127.0.0.1:8080;
          }
      }

但是当 server 超过2个时,建议将不同对虚拟主机的配置放在另一个文件中,然后通过在主配置文件 nginx.conf 加上 include 指令包含进来。更便于管理。

include vhosts/*.conf;

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

alias后跟的指定目录是准确的,并且末尾必须加 /。

location /c/ {
   alias /a/;
}
root

root后跟的指定目录是上级目录,并且该上级目录下要含有和location后指定名称的同名目录才行。

    location /c/ {
        root /a/;
    }

这时访问站点http://location/c访问的就是/a/c目录下的站点信息。
如果你需要将这个目录展开,在这个location的末尾加上「autoindex on; 」就可以了

转发

这个很简单,指定IP和端口直接转发过去就可以了.譬如转发到localhost的3000端口

location / {
    proxy_pass localhost:3000;
}
负载均衡

我们在 upstream 中指定了一组机器,并将这个组命名为 myserver,这样在 proxypass 中只要将请求转移到 myserver 这个 upstream 中我们就实现了在四台机器的反向代理加负载均衡。其中的 ip_hash 指明了我们均衡的方式是按照用户的 ip 地址进行分配。另外还有轮询、指定权重轮询、fair、url_hash几种调度算法。

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;
}

结束语

以上是最简单的通过 nginx 实现静态文件转发、反向代理和负载均衡的配置。在 nginx 中所有的功能都是通过模块来实现的,比如当我们配置 upstream 时是用 upstream 模块,而 server 和 location 是在 http core 模块,其他的还有流控的 limt 模块,邮件的 mail 模块,https 的 ssl 模块。他们的配置都是类似的可以再 nginx 的模块文档中找到详细的配置说明。

上一篇下一篇

猜你喜欢

热点阅读