Nginx安装

安装
安装依赖
在Linux中是编译安装,所以要准备一系列工具

yum install pcre-devel make gcc gcc-c++ ncurses-devel perl zlib zlib-devel openssl openssl-devel
工具目的 程序
编译器 make gcc gcc-c++
安全协议 openssl openssl-devel
语言 perl脚本语言
正则表达式库 pcre-devel(用于perl语言)
压缩库 zlib zlib-devel
字符处理库 ncurses-devel
cd /usr/local/
wget http://nginx.org/download/nginx-1.10.1.tar.gz
tar -zxvf nginx-1.10.1.tar.gz
cd nginx-1.10.1  

执行Configuration配置检查文件,指定目录到刚刚新建的nginx目录里

./configure --prefix=/usr/local/nginx 

执行make操作和make install进行安装

make
make install

安装完成后,将nginx命令移动到$PATH的目录下,这样就不用每次都cd到 /usr/local/sbin 里去运行了

mv /usr/local/nginx/sbin/nginx /usr/local/bin/

然后使用nginx -c 命令指定配置文件,接着使用 nginx -t 命令检查配置文件是否正确,得到反馈syntax is ok

nginx -c /usr/local/nginx/conf/nginx.conf
nginx -t

启动:

nginx

重启:

nginx -s reload

立即停止:

nginx –s stop

温和停止:

nginx -s quit

强制关闭:

pkill nginx

打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。

配置
Nginx配置文件常见结构的从外到内依次是「http」「server」「location」等等,缺省的继承关系是从外到内,也就是说内层块会自动获取外层块的值作为缺省值。

  • HTTP
    HTTP代表在该计算机上启动HTTP路由,可以开启不同的server服务,所以HTTP内可以包括多个server。
http {
  server {
    # 在80端口监听http服务
    # 正常情况下会和个人电脑的浏览器冲突,但是服务器上一般没浏览器
    # 因为浏览器之所以能上网,就是在80端口不停的监听http服务
    listen       80;  
    server_name  localhost;
    ......
  }

  server {
    # 在8080端口监听http服务
    listen       8080;
    server_name  localhost;
    ......
  }

  ......
}
  • Server
    接收请求的服务器需要将不同的请求按规则转发到不同的后端服务器上,在 nginx 中我们可以通过构建虚拟主机(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;
}

这里的 listen 指监听端口,server_name 用来指定IP或域名,多个域名对应统一规则可以空格分开,index 用于设定访问的默认首页地址,root 指令用于指定虚拟主机的网页跟目录,这个地方可以是相对地址也可以是绝对地址。
但是当 server 超过2个时,建议将不同对虚拟主机的配置放在另一个文件中,然后通过在主配置文件 nginx.conf 加上 include 指令包含进来。更便于管理。

include vhosts/*.conf;

由于DNS的存在,我们可以使用一个IP对应多个域名,比如 www.a.comwww.b.com 这个称之为host,后边的才是路径path,Nginx会对HTTP的Request报文做如下处理。

POST /psas/bug/image/confirm HTTP/1.1  <== 第一行才是path
Accept: application/json
Content-Type: text/plain; charset=utf-8
Cookie: JSESSIONID=h72ql6a
Host: www.a.com:8080        <== 这一行是host
Connection: close
User-Agent: Paw/3.0.12 (Macintosh; OS X/10.12.0) GCDHTTPRequest
Content-Length: 366

接收到请求后去HTTP报文头拿host字段。
去和server name字段进行匹配,哪个匹配上用哪个处理。
如果没有匹配上,就用listen了当前端口的默认server处理。
默认server可以自己设置,如果没有设置,默认配置文件中最靠前是默认。

  • Location
    每个 url 请求都会对应的一个服务,nginx 进行处理转发或者是本地的一个文件路径,或者是其他服务器的一个服务路径。而这个路径的匹配是通过 location 来进行的。我们可以将 server 当做对应一个域名进行的配置,而 location 是在一个域名下对更精细的路径进行配置。如果有多个匹配的location块,则nginx选择最长前缀的那个。/的location块的前缀只有一个字符,是最短的,因此只有当其它location都匹配失败时,这个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

具体可参考:Location配置详细

服务静态内容:
web服务器的一个重要任务是对外输出文件,比如图片和静态网页。你会实现一个这样的例子:根据不同的请求,文件会从不同的本地目录,如: /data/www (html) 和 /data/images 被输出。这需要修改配置文件并且在http块指令中建立带有两个location块的server块。
首先,创建/data/www的目录并且放置一个index.html的文件,然后创建/data/images目录并放置一些图片
下面的例子中它会匹配以/images/开始的请求(location / 也会匹配这个请求,但它的前缀更短) 。如,server块指令看起来就像这样

server {
    location / {
        root /data/www;
    }

    location /images/ {
        root /data;
    }
}

这个配置已经可以工作了,它监听在标准的80端口上,并且可以在本机上通过http://localhost/ 访问。为了响应以/images/开头的URI,服务器会从/data/images目录中发送文件。比如:为了响应http://localhost/images/example.png ,nginx会发送/data/images/example.png这个文件,如果不存在这样的文件,nginx就会发送404错误。而不以/images/开头的请求则被映射到/data/www目录,比如:http://localhost/some/example.html 被映射到/data/www/some/example.html文件。

建立简单的代理服务器:
nginx一个最常见的用途就是用作代理服务器,也就是把收到的请求传递给被代理的服务器,并从被代理服务器中取回响应,再将其发送给客户端。
我们会配置一个基本的代理服务器,对于图片文件的请求,从本地目录中发送文件,而对于其它的请求,则把请求转发给另一个被代理服务器。在这个例子里,两个服务器都会在一个单一的nginx实例中被定义。
首先,通过添加一个块指令定义一个被代理服务器:

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

这是一个监听在8080端口的简单服务器(之前我们定义的server块不声明listen指令是因为使用了标准的80端口)并且会把所有请求映射到本地的 /data/upl 文件夹。创建这个文件夹并且放入一个index.html文件。注意,这里的root指令被放在了server上下文中。当有一个location被选择了而它的内部却没有root指令时,它就会使用server中的这个root指令。
接下来,修改在前一节中的server配置使它变为一个代理服务器的配置。在第一个location块中,添加proxy_pass指令,它的参数是被代理服务器的协议,名称和端口。(本例中,参数是 http://localhost:8080):

server {
    location / {
        proxy_pass http://localhost:8080;
    }

    location /images/ {
        root /data;
    }
}

我们现在修改第二个location块,使它由原先的匹配/images/前缀变为匹配典型的图片文件扩展名。修改后的location如下:

location ~ \.(gif|jpg|png)$ {
    root /data/images;
}

这个参数是一个匹配所有以.gif,.jpg或.png结尾的URI的正则表达式。~ 应该被写在正则表达式前面。

当nginx选择一个location时,它先检查前缀,并且记录匹配的location(最长前缀),然后nginx再检查正则表达式,如果有一个正则表达式匹配,它就选择这个location,否则,选择之前记录的location。
最终的代理服务器配置:

server {
    location / {
        proxy_pass http://localhost:8080/;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}

现在,这个服务器可以将以.gif,.jpg或.png结尾的请求映射到本机目录,将其它所有请求发送到被代理服务器。为了使配置生效,要发送reload信号。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 编译自:installing-nginx-open-source 目录 选择 Stable 还是 Mainline...
    C86guli阅读 3,841评论 0 21
  • 配置运行Nginx服务器用户(组) 用于配置运行Nginx服务器用户(组)的指令是user,其语法格式为: use...
    吃瓜的东阅读 4,468评论 0 41
  • 01. 崔曼舒,是我在大学里认识的第一个朋友。她在大一的时候去华南理工大学找她的高中好友,在她陪那个高中好友去参加...
    另一个陈易阅读 1,175评论 32 46
  • 曾忆微风起,吹散少年心。再相见已难,执笔书旧情。 【一】小时候最喜欢栀子花,又白又香。每到栀子花开的季节,总会很希...
    稚小子阅读 378评论 2 3