nginx:菜鸟手册

以下讲记述的,是为nginx入门级新人和打算学习nginx的人而准备的。

首先,nginx(读作:engine x)是一个反向代理服务器。这里顺便阐述一下相关的概念,来帮助概念不清楚的朋友来获得最佳的学习体验。
服务器可以按照不同标准划分为很多种,那么这里讨论的就是其中的一种,代理服务器。代理服务器可以再次细分,分为正向代理服务器和反向代理服务器,这两者是相对于目标服务器而言的。当我们(O)希望访问某一台服务器(T,是具体的服务器),但是由于种种原因,我们不能去直接的访问T,但是我们可以直接访问另一台服务器(P),而P却可以访问T,那么正好,我们拜托P去访问T,将获得的信息返回给我们,这个过程中,我们始终知道要访问的那一台服务器,所以,这个代理过程称为正向代理;那么与之相对,如果我们知道要访问的站点,但是该站点可能同时部署在多个服务器上,不过最终我们获得了目标站点的内容,这个过程中,我们不知道具体访问过哪一台服务器,所以,这个代理过程称为反向代理。

那么nginx就是近些年来使用率不断攀升的代理服务器,你可以查看一下中间件的使用情况,这里给出一个调查,点我查看

好了,我们开始吧。我不管你什么系统,但是我假定你已经安装好了nginx,排除那些系统上操作的差异,我们来感受一下最基本的操作。
nginx的启动停止重新加载配置文件
在控制台中定位到nginx所在的目录,使用nginx -s signal操作nginx,signal可以是以下参数
  • stop — 立刻停止(不会等待当前工作结束)
  • quit — 延迟停止(会等待当前工作结束)
  • reload — 重新加载配置文件(会优先检查新配置文件的格式,通过校验则启用新配置,不通过则沿用旧配置)
  • reopen — 重新打开日志文件
好了,知道了基本操作之后,我们就看一下配置文件,看懂了配置文件,我们就能让nginx按照我们的需要来运作。打开nginx.cnf文件
#user  nobody;
#我左边有个“#”号,这说明这一行都是注释
#下面的这个,看起来像一对键值对,这么理解也可以,官方给出的解释是“简单指令”
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

#与简单指令相对,下面的event以及一对花括号,称作“块指令”;含有其他指令的“块指令”,我们称作“上下文”
#同时,我们把不被包含在任何其他上下文中的上下文称作主上下文
#所以,“events”和“http”就是主上下文,“server”和“location”就不是主上下文
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
 
    #好了,我们需要配置一个服务器最基本的功能,给出请求相应结果
    #看到下面这个server上下文,它看上去但是也的确是用来配制服务器的
    server {
        #这个server上下文监听的端口以及域名
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #这里就是路由规则了,location加空格再加匹配项,这里的匹配项是“/”,也就是说所有以“/”开头的请求都符合这个路由规则
        #但是需要注意一点,nginx在匹配路由的时候有一个最长前缀匹配规则,看到下一个路由规则
        location / {
            #这里的root指的是响应资源所在的目录,这是指明,资源在nginx目录下的index目录里
            root   html;
            #index指令会响应指定的页面,按次序进行查找,找到了就返回
            index  index.html index.htm;
        }
        
        #这location的匹配项是“/demo”,那么当一个请求是“/demo/get”的时候,这个请求会匹配之前的“/”和这里的“/demo”,但是
        #nginx会选择前缀较长的匹配项来匹配,所以nginx会使用/demo路由的相应内容
        location /demo {
            #这里又重新设定了root的值,表示用nginx目录demo目录下的资源响应
            #如果root在主上下文之外设定,那么相当于一个全局的设定,在其他上下文中没有被覆盖的话,则使用全局设定
            root   demo;
        }

        #截止到为目前的配置,nginx都是用来响应静态的资源,比如我们访问localhost/demo/show.html,那么nginx会返回nginx目录下
        #demo目录下show.html的内容,所以,我们经常会把nginx当做一个静态内容缓存来使用,来缓解后续服务器的响应压力

        #对于location来说,常用的还有正则匹配
        #静态资源配置,当然也可以来响应动态请求,不过这里有一点需要注意,当使用正则匹配时,如果请求匹配了当前的路由规则,那么
        #会以正则的匹配内容为主并返回,不会使用非正则的匹配项内容返回,以“~”开头,就表示匹配项是一个正则表达式,当然,还有其
        #他不同规则的前缀都表示正则,后续再展开
            location ~ .*\.(css|js)(.*) {
             proxy_set_header Host $host;
             proxy_cache_valid 200 302 1h;
             proxy_cache_valid 301 1d;
             proxy_cache_valid any 1m;
             expires 7d;
        }

        #对于代理服务器来说,最基本的功能代理是必不可少的,而且配置也非常简单
        #端口转发配置,做出如下配置之后,符合匹配项的请求会原封不动的转发到otherhost域名下
        location /proxy{
         proxy_pass http://otherhost;
        }

        #下面的配置显而易见,是错误页面的配置
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
有了这套最基本的配置,就可以试着开启nginx,感受一下它的功能

posted on 2015-12-01 17:32 都较瘦 阅读(221) 评论(0)  编辑  收藏 所属分类: 中间件相关问题积累


只有注册用户登录后才能发表评论。


网站导航:
 
<2015年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

公告

博客定位:囿于目前的水平,博客定位在记录自己的学习心得和随手的练习

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜