nginx快速入门

1,069 阅读4分钟

nginx快速入门

注:本文针对官网的快速入门教程进行一个中文的解释,以帮助英文阅读能力较差的学习者快速上手

参考官网连接Beginner's Guide (nginx.org)

Centos下的安装

sudo yum install yum-utils
# 创建文件
vim /etc/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
####
# 进行安装
sudo yum install nginx

若其他操作系统的安装请参考官网Installing nginx

nginx介绍

nginx可用于提供静态内容,做代理服务器……

nginx由一个主进程和几个工作进程组成,主线程的目标是去读取配置并管控工作线程,工作线程处理实际的请求。

nginx的运行模式由配置文件进行控制,配置文件名为nginx,一般情况下被放置在/usr/local/nginx/conf, /etc/nginx, or /usr/local/etc/nginx.

启动、停止和重新载入配置

启动nginx通过

nginx

查看运行的nginx进程

ps -ef | grep nginx
# 结果
root     13329     1  0 10:00 ?        00:00:00 nginx: master process nginx
nginx    13330 13329  0 10:00 ?        00:00:00 nginx: worker process
nginx    13331 13329  0 10:00 ?        00:00:00 nginx: worker process
root     13342 10141  0 10:00 pts/1    00:00:00 grep --color=auto nginx

启动nginx之后,可以通过以下的格式来控制ngnix了

nginx -s [signal]

signal有以下的取值

  • stop — 快速关闭
  • quit — 和平的方式进行关闭 (工作线程会继续服务当前正在请求的线程)
  • reload — 重新载入配置
    • 主进程读入配置,并检查语法的正确性
    • 成功之后,主进程会通知工作线程关闭,并不再接受新的请求
    • 工作线程仍会处理当前的请求,再进程关闭
  • reopen — 重新打开日志文件

配置文件的结构

配置文件由指令构成,指令分为简单指令和块指令。

简单指令由空格分开的name和parameters组成,以分号作为结束

name parameters;

块指令的结构类似于简单指令,但它不是以分号结尾,而是以一组用大括号 { 和 } 括起来的附加指令结尾。如果块指令在大括号内包含其他指令,则它被称为上下文 (context)。如下

http {
    server {
    ...
    }
}

配置文件中放置在任何上下文之外的指令都被认为是在主上下文中eventshttp 指令在主上下文中server 指令在 http 上下文, location指令在 server 上下文。

使用#作为注释

对外提供静态内容(提供网页服务)

首先定义想要提供的静态资源,例如在/data/www中定义index.html页面,index.html中写入以下内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>nginx学习</title>
</head>
<body>
    <h1>欢迎学习nginx</h1>
</body>
</html>

修改/etc/nginx/nginx.conf中的配置文件,注释掉原有的http块指令,添加添加以下内容

http {
    server {
        listen       80;
    	server_name  localhost;
        location / {
                root /data/www;
        }
    }
}

上面这些配置是什么意思呢,http代表响应http请求,server被称为虚拟主机,用于响应http请求。location用于定义响应内容的匹配规则。

请求到达后,对应location的匹配规则是这样的,对location后面的路径进行匹配,找到最长前缀匹配的location,将对应location的root的路径拼接进URI中,最后在文件系统中查找对应的位置

例如:

对于http://localhost:80/index.html则会匹配到/data/www/index.html文件

对于http://localhost:80/images/a.png则会匹配到/data/www/images/a.png文件

最后启动一下nginx试试

nginx

如果配置未生效

继续执行

nginx -s reload

最终的到自定义的页面了

image-20230414113043326.png

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

在配置文件中设置

http {
    # 监听8080端口的服务器,将URI映射到/data/up1中
    server {
        listen 8080;
        root /data/up1;

        location / {
    	}
	}

    # 代理服务器
    server {
        location / {
            proxy_pass http://localhost:8080/; # 代理路径
        }
		# 将以gif,jpg,pnf结尾的URI映射到本地/data/images文件系统
        location ~ \.(gif|jpg|png)$ { # 以~开头的为正则表达式
            root /data/images;
        }
	}
}

最终启动即可