nginx入门

1 安装nginx

在ubuntu上运行如下命令:

apt-get update
apt-get install nginx

2 使用
nginx有一个master进程和多个worker进程。master进程的主要作用是读取执行configuration文件,以及维护worker进程。worker进程处理实际的请求。nginx采用基于event的模型和依赖于OS的机制来高效的在worker进程间分发请求。worker进程的数量可以在configuration文件中定义,可以给定一个固定值,也可以根据CPU核数自动调整。
configuration文件决定了nginx及其modules运行方式。默认情况下,configuration文件命名为nginx.conf,并放置在/usr/local/nginx/conf,/etc/nginx或/usr/local/etc/ngnix文件夹下

2.1启动nginx

启动nginx需要运行可执行文件。
一旦nginx启动,就可以使用带-s参数的可执行命名来控制nginx。使用下面的语法:
nginx -s signal
signal的值可以是:

  • stop-快速关闭
  • quit-友好退出
  • reload-重新加载配置文件
  • reopen-重新打开日志文件
    比如,待worker进程结束对当前请求的服务后退出nginx,可以使用下面的命令:
 nginx -s quit

更改的配置文件不会不会立即生效,需要执行下面的命令让nginx重新加载配置文件,或者nginx被重新启动。

nginx -s reload

一旦master进程接收到需要重新加载配置文件的信号,它会检查新的配置文件的语法正确性,然后在使用这些配置。如果检测通过,master进程会开启一个新的worker进程,并发送一些请求关闭进程的messages给原来的worker进程。否则,master进程会回滚这些改变,并继续使用原来的配置运行。原来的worker进程接收到关闭命令后,停止接收新的连接,并继续完成当前的请求,直到所有的这类请求被处理完,原来的worker进程才退出。

2.2配置文件的结构

nginx由modules组成,这些module由配置文件中的特定指令所控制。指令分为简单指令和块指令。简单指令由名称和空格隔开的参数组成,并以分号结尾。块指令和简单指令由相同的结构,但包含在{}块里面。如果一个块指令有由{}包含的其他指令,那它就叫做context(比如events,http,server,location等)。
配置文件中没有放置在任何context里的指令,会默认属于main Context。events和http指令存在于main Context中,server存在于http中,location存在于server中。
“#”标识之后的内容会被认为是注释。

2.3静态内容

web server的一个重要任务就是分发文件(比如Images或静态的HTML).根据请求的不同,会定位到不同的本地目录:/data/www/(包含HTML文件),、data/images(包含图片)。这样就需要在配置文件中设置http块中的server块,并为server设置两个location块。
首先,创建一个/data/www目录并在目录下创建一个index.html文件;创建一个/data/images目录并放置一些图片。
接下来,打开配置文件。配置文件中默认已经包含了一些server块的例子,大多数都被注释掉了。现在注释掉所有server块,创建一个新的server块,如下:

http{
    server{
    }
}

一般来说,配置文件中可以包含多个server块,每个server部署了监听的端口和server名称。一旦nginx决定了哪个server处理请求,它就会根据server块中loaction指令的参数测试请求header中指定的URI。
像下面这样添加location块到server上下文中。

location/{
    root /data/www;
}

location上下文指定了“/”前缀来与请求中的URI作比较。对于匹配的请求,URI会被添加到root指令指定的路径,即/data/www,中以形成本地文件系统中请求文件的路径。如果有多个location上下文都匹配,nginx会选择最长前缀的那个。上面的location提供的是对短前缀。所以仅当其他的location上下文都匹配失败,该上下文才会使用。
接下来,添加第二个location块:

location /images/ {
     root /data;
}

它会匹配一个以/images/开始的请求(location / 也能匹配这样一个请求,但是它是一个更短的前缀)。
server上下文的最终配置应该如下:

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

这已经是一个可以运行的server配置了,它监听的是标准的80端口,可以在本机使用http://localhost/访问。与URI以/images/开始的请求相应的响应,server会从/data/inages目录发送文件。例如http://localhost/images/example.png请求,nginx会发送/data/images/example.png文件。如果该文件不存在,nginx会响应404错误。不是以/images/开始的URI请求会被映射到/data/www目录。例如http:localhost/some/example.html请求,nginx会发送/data/www/some/example.html文件。
为了使新配置生效,如果nginx还没有启动,先启动;如果启动了,就发送reload信号量到nginx的master进程,执行下面的命令:

nginx -s reload

2.4设置一个简单的代理服务器

nginx最常用的一个场景就是作为代理服务器使用。也就是说,nginx可以接收请求,并传递请求到被代理的服务器上,也能从被代理的服务器上恢复响应,并发送响应到客户端。
下面会配置一个基本的代理服务器,它服务于图片(图片文件来自于本地目录)请求,并发送所有的请求到被代理的server上。在这个例子中,所有的server都定义在一个nginx实例中。
首先,在配置文件中定义一个被代理的server:

server{
    listen 8080;
    root /data/up1;
    location / {
    }
}

这是一个简单的监听8080端口的server(前面的listen 指令没有被指定,是因为它使用默认端口80),该server映射所有请求到本地文件系统的/data/up1目录。创建该目录,并放置一个index.html文件在其中。注意root指令是放置在server上下文中的。当为某个请求服务的location块不包含自己的root指令的时候,server中的root就会被使用。
接下来,然后修改前面的server配置,使其成为一个代理server配置。在第一个location块,加入proxy_pass指令 并在参数中指定协议、名称和被代理服务器的端口(本例中是http://localhost:8080):

server{
    location / {
        proxy_pass http://localhost:8080;
    }
    location /images/ {
        root /data;
    }
}

修改第二个location块,当前它映射/images/为前缀的请求到/data/images目录中的文件。为了使它匹配特定扩展名的图片,可以像下面这样配置:

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

参数是一个正则表达式,匹配以.gif,.jpg,.png结尾的URI。正则表达式应该以~开始。相应的请求会被映射到/data/images目录下。
当nginx选择一个location去服务请求的时候,它首先会检查location指令指定的前缀,并记住具有最长前缀的location,然后检查正则表达式。如果与正则表达式匹配,nginx会选择该location,否则会选择次之匹配的。
一个代理server的完整配置如下:

server{
    location / {
    proxy_pass http://localhost:8080;
    }
    location ~\.(gif|jpg|png)${
    root /data/images;
    }
}


该server会过滤所有以.gif,.jpg,.png的请求,并映射到/data/images目录,传递所有其他的请求到上面配置的被代理的server上。

2.5配置FastCGI代理

nginx可以用来路由请求到FastCGI server上去,这些server可以运行各种框架和语言构建的应用。
使nginx和FastCGI server一起运行的基本配置是使用fastcgi_pass指令代替proxy_pass指令,并用fastcgi_param指令设置传递到FastCGI server的参数。假如FastCGI server运行在localhost:9000.以先前的代理配置文件为基础,使用fastcgi_pass指令代替proxy_pass指令,改参数值为localhost:9000.假如使用的是PHP,SCRIPT_FILENAME参数决定了脚本名,QURY_STRING 参数用来传递请求参数。最终配置如下:

server{
    location / {
        fastcgi_pass http://localhost:9090;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param QUERY_STRING $query_string;
    }
    location ~\.(gif|jpg|png)${
        root /data/images;
    }
}

这样设置的一个server会通过FastCGI协议路由所有静态图片的请求到被代理的server上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值