Nginx 新手入门

安装

在centOS上安装nginx,最新版本1.21的要求centOS 7.4.x以上的,我们用的是centOS 7.3,试了一下,也能装。
centOS安装教程在这里,下面简单翻译下,大致这些步骤

  • 安装工具
sudo yum install yum-utils
  • 设置yum的仓库,增加文件ect/yum.repos.d/nginx.repo,内容如下
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

这样默认安装的是稳定版,如果想要直接安装最新主线版本,可以运行这个yum命令

sudo yum-config-manager --enable nginx-mainline
  • 执行如下命令安装nginx
sudo yum install nginx

安装完成。

新手入门

本篇将介绍如何启动、停止nginx,重新加载配置,解释配置文件的结构,并解释如何设置该配置文件以便nginx可以提供静态文件,如何把nginx配置为一个反向代理,以及如何连接一个FastCGI应用。

nginx 有一个master进程,以及多个worker进程,master进程的主要工作是读取并评估配置文件,维护多个worker进程。从进程用于处理实际的web请求。nginx依赖于事件模型以及其他一些独立于操作系统的机制来有效的在多个worker进程之间分发客户请求。
worker进程的数量在配置文件中定义,可以针对给定配置固定,也可以根据可用CPU内核的数量自动调整。
nginx及其模块的工作方式在配置文件中确定。默认情况下,配置文件名为nginx.conf,并放置在目录/usr/local/nginx/conf、/etc/nginx或/usr/local/etc/nginx中。

启动、停止以及重新加载配置文件

只要在bash环境下输入nginx即可启动nginx服务

nginx

启动之后,就可以通过信号量量控制该nginx服务,格式如下

nginx -s signal

其中signal可以是以下几个值

  • stop — fast shutdown
  • quit — graceful shutdown
  • reload — reloading the configuration file
  • reopen — reopening the log files

比如,执行如下的命令可以结束nginx进程,他会等待worker进程处理完当前正在执行的请求之后再结束。

nginx -s quit
这个命令必须使用启动该nginx进程的用户来执行。

配置文件改变之后,要生效的话,要执行reload命令。

nginx -s reload

master进程收到reload信号量之后,他会检查配置文件的语法是否正确,并且尝试加载该配置,如果加载成功,master进程会开启一个新的worker进程,并且发送信号给老的worker进程,要他结束运行。如果加载失败,则master会回滚配置,老的worker进程继续运行。
worker进程收到结束命令之后,将停止接受新的连接,但会继续处理完手上的连接,处理完之后就关闭。

也可使用linux的kill命令来给nginx进程发送消息,如下命令直接把 -s QUIT命令发送给1628进程。

kill -s QUIT 1628

可以通过如下命令来查找正在运行的nginx进程

ps -aux  | grep nginx

在这里插入图片描述
可以看到进程描述,是nginx master 还是nginx worker

配置文件结构

nginx由配置文件中指定的指令控制的模块组成。指令分为简单指令和块指令。简单指令由名称和参数组成,以空格分隔,以分号(;)结尾。块指令与简单指令具有相同的结构,但它不是分号,而是以一组附加指令结束,这些指令由大括号( { 和 })包围。如果块指令可以在大括号内包含其他指令,则称为上下文(例如:event、http、server和loction)。
那些不在任何大括号内的指令可以被认为是处于main上下文中。events和http指令放在main上下文内,server放在http内,location放在server内。
#开头的行是注释。

提供静态内容

web服务器的一项重要任务是提供文件(如图像或静态HTML页面)。您将实现一个示例,其中根据请求,将从不同的本地目录:/data/www(可能包含HTML文件)和/data/images(包含图像)提供文件。这将需要编辑配置文件,并在http块内设置一个server块,其中包含两个location块
首先,创建/data/www目录,并将包含任何文本内容的index.html文件放入其中,然后创建/data/images目录并在其中放置一些图像。
接下来,打开配置文件。默认配置文件已经包含了server块的几个示例,大部分都被注释掉了。现在,注释掉所有这些块并启动一个新的server块:

http {
    server {
    }
}

通常,配置文件可能包括多个服务器块,这些服务器块由它们侦听的端口和服务器名称区分。一旦nginx决定哪个服务器处理一个请求,它将根据server块中定义的location指令的参数测试请求头中指定的URI。
把如下的location块添加到server块内

location / {
    root /data/www;
}

此location块指定"/"前缀与来自请求的 URI 对比。对于匹配的请求,URI 将被添加到root 指令中指定的路径中 ,即 /data/www,以形成本地文件系统上所请求文件的路径。如果有多个匹配location块,nginx 会选择前缀最长的块。location上面的块提供了长度为 1 的最短前缀,因此只有当所有其他location 块都无法提供匹配时,才会使用该块。
接下来,添加第二个location块:

location /images/ {
    root /data;
}

它将匹配以/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/开头的URI请求,都将被映射到/data/www目录。例如,为了响应 http://localhost/some/example.html请求,nginx 将发送/data/www/some/example.html文件。

要应用该新配置,如果nginx没有启动,则使用nginx命令启动他;如果已经启动,则使用reload命令重新加载.

nginx -s reload
如果万一配置不生效,我们想要分析原因,则可以通过user/local/nginx/logs 或者 /var/log/nginx来查看日志

配置一个简单的代理服务器

nginx 的常见用途之一是将其设置为代理服务器,这意味着服务器接收请求,将它们传递给代理服务器,从它们接收响应,并将它们发送到客户端。

我们将配置一个基本的代理服务器,对于所有图像的请求,他将使用来自本地目录的文件来响应,对于所有其他请求将发送到代理服务器。在此示例中,两个服务器都将在单个 nginx 实例上定义。

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

这将是一个简单的服务器,它侦听端口 8080(在上个例子中,由于使用了标准端口 80 ,因此未指定该listen指令)并将所有请求映射到/data/up1本地文件系统上的目录。创建此目录并将index.html文件放入其中。请注意,该root指令位于 server上下文中,对于该server内后续其他的location指令,如果内部没有指定root指令,则使用该根路径下的root指令作为默认。

接下来,复用上一节的server配置并修改,使其成为一个代理服务器配置。在第一个location中,添加一个proxy_pass指令,在内容中带上协议(http://)、名称、以及端口号,也就是本例子中的(http://localhost:8080)

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

    location /images/ {
        root /data;
    }
}

接下来修改第二个location指令,让他只处理特定类型的图片资源,如下。

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

~ .(gif|jpg|png)$ 是一个正则表达式,他将所有以 .gif, .jpg, .png结尾的URI都萤石到 /data/images目录下。
当nginx收到一个请求之后,他按照如下规则来定位对应的location块:

  • 是否有对应的前缀的location块,长度越长的越优先;
  • 然后检查正常表达式,看是否有匹配的表达式。
  • 如果都没有,则使用之前记住的location块。

此时,这个server块是这样的

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

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

重新加载该配置之后,该配置将生效,对于.gif, .png, .jpg结尾的图片,nginx将使用 /data/images的本地文件响应,其他请求都将转到 http://localhost:8080代理服务器。
关于代理服务器的更多配置指令,可以参考这里

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值