Nginx快速入门
本文主要介绍nginx的基本配置和操作,并介绍了一些可以完成的简单任务。
假设您已经学习过并已经安装好了nginx服务器。 如果没有,请参阅安装nginx页面(http://www.yiibai.com/nginx/nginx-install.html )。
本指南介绍如何启动和停止nginx,并重新加载其配置,解释配置文件的结构,并介绍如何设置nginx以提供静态内容,如何配置nginx作为代理服务器,以及如何将其连接到 一个FastCGI应用程序。
nginx有一个主进程和几个工作进程。 主进程的主要目的是读取和评估配置,并维护工作进程。 工作进程对请求进行实际处理。
nginx采用基于事件的模型和依赖于操作系统的机制来有效地在工作进程之间分配请求。 工作进程的数量可在配置文件中定义,并且可以针对给定的配置进行修改,或者自动调整到可用CPU内核的数量(请参阅worker_processes)。
在配置文件中确定nginx及其模块的工作方式。 默认情况下,配置文件名为nginx.conf
,并放在目录:/usr/local/nginx/conf
, /etc/nginx
, 或 /usr/local/etc/nginx
中。
在前面安装文章配置中,使用的安装配置目录是:/usr/local/nginx/conf
。所以可以在这个目录下找到这个配置文件。
本文主要介绍nginx的基本配置和操作,并介绍了一些可以完成的简单任务。假设您已经学习过并已经安装好了nginx服务器。 如果没有,请参阅安装nginx页面(http://www.yiibai.com/nginx/nginx-install.html )。 本指南介绍如何启动和停止nginx,并重新加载其配置,解释配置文件的结构,并介绍如何设置nginx以提供静态内容,如何配置nginx作为代理服务器,以及如何将其连接到 一个FastCGI应用程序。
nginx有一个主进程和几个工作进程。 主进程的主要目的是读取和评估配置,并维护工作进程。 工作进程对请求进行实际处理。 nginx采用基于事件的模型和依赖于操作系统的机制来有效地在工作进程之间分配请求。 工作进程的数量可在配置文件中定义,并且可以针对给定的配置进行修改,或者自动调整到可用CPU内核的数量(请参阅worker_processes)。
在配置文件中确定nginx及其模块的工作方式。 默认情况下,配置文件名为nginx.conf
,并放在目录:/usr/local/nginx/conf
, /etc/nginx
, 或 /usr/local/etc/nginx
中。
在前面安装文章配置中,使用的安装配置目录是:/usr/local/nginx/conf
。所以可以在这个目录下找到这个配置文件。
1. 启动,停止和重新加载Nginx配置
要启动nginx,请运行可执行文件。 当nginx启动后,可以通过使用-s
参数调用可执行文件来控制它。 使用以下语法:
nginx -s signal
信号(signal
)的值可能是以下之一:
stop
- 快速关闭服务quit
- 正常关闭服务reload
- 重新加载配置文件reopen
- 重新打开日志文件
例如,要通过等待工作进程完成服务当前请求来停止nginx
进程,可以执行以下命令:
nginx -s quit
注:该命令应该在启动nginx的同一用户下执行。
在将重新配置命令的命令发送到nginx或重新启动之前,配置文件中的更改将不会被应用。 要重新加载配置文件,请执行:
nginx -s reload
当主进程收到要重新加载配置的信号,它将检查新配置文件的语法有效性,并尝试应用其中提供的配置。 如果这是成功的,主进程将启动新的工作进程,并向旧的工作进程发送消息,请求它们关闭。 否则,主进程回滚更改,并继续使用旧配置。 老工作进程,接收关闭命令,停止接受新连接,并继续维护当前请求,直到所有这些请求得到维护。 之后,旧的工作进程退出。
还可以借助Unix工具(如kill utility)将信号发送到nginx进程。 在这种情况下,信号直接发送到具有给定进程ID的进程。 默认情况下,nginx主进程的进程ID写入目录/usr/local/nginx/logs
或/var/run
中的nginx.pid。 例如,如果主进程ID为1628
,则发送QUIT信号导致nginx的正常关闭,请执行:
kill -s QUIT 1628
要获取所有运行的nginx进程的列表,可以使用ps
命令,例如,以下列方式:
ps -ax | grep nginx
2. 配置文件的结构
nginx由配置文件中指定的指令控制的模块组成。 指令分为简单指令和块指令。 一个简单的指令由空格分隔的名称和参数组成,并以分号(;
)结尾。 块指令具有与简单指令相同的结构,但不是以分号结尾,而是以大括号({
和}
)包围的一组附加指令结束。 如果块指令可以在大括号内部有其他指令,则称为上下文(例如:events
,http
,server
和location
)。
配置文件中放置在任何上下文之外的伪指令都被认为是主上下文。 events
和http
指令驻留在主上下文中,server
在http
中的,而location
在http
块中。
#
号之后的一行的部分被视为注释。
3. 提供静态内容服务(静态网站)
一个重要的Web服务器任务是提供文件(如图像或静态HTML页面)。这里我们来学习如何实现一个示例,根据请求,文件将从不同的本地目录提供:/data/www
(可能包含HTML文件)和/ data/images
(包含图像)。这将需要编辑配置文件,并使用两个位置块在http块内设置服务器块。
首先,创建/data/www
目录,并将一个包含任何文本内容的index.html
文件放入其中,并创建/data/images
目录并在其中放置一些图像。创建两个目录 -
[root@localhost ~]# mkdir -p /data/www
[root@localhost ~]# mkdir -p /data/images
[root@localhost ~]#
分别在上面创建的两个目录中放入两个文件:/data/www/index.html
和 /data/images/logo.png
,/data/www/index.html
文件的内容就一行,如下 -
<h2> New Static WebSite Demo.</h2>
接下来,打开配置文件(/usr/local/nginx/conf/nginx.conf
)。 默认的配置文件已经包含了服务器块的几个示例,大部分是注释掉的。 现在注释掉所有这样的块,并启动一个新的服务器块:
http {
server {
}
}
通常,配置文件可以包括服务器监听的端口和服务器名称区分的几个server
块。当nginx决定哪个服务器处理请求后,它会根据服务器块内部定义的location
指令的参数测试请求头中指定的URI。
将以下location
块添加到服务器(server
)块:
http {
server {
location / {
root /data/www;
}
}
}
该location
块指定与请求中的URI相比较的“/
”前缀。 对于匹配请求,URI将被添加到root
指令中指定的路径(即/data/www
),以形成本地文件系统上所请求文件的路径。 如果有几个匹配的location
块,nginx将选择具有最长前缀来匹配location
块。 上面的location
块提供最短的前缀长度为1
,因此只有当所有其他location
块不能提供匹配时,才会使用该块。
接下来,添加第二个location
块:
http {
server {
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
}
它将是以/images/
(位置/
也匹配这样的请求,但具有较短前缀,也就是“/images/
”比“/
”长)的请求来匹配。
server
块的最终配置应如下所示:
server {
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
这已经是一个在标准端口80
上侦听并且可以在本地机器上访问的服务器( http://localhost/
)的工作配置。 响应以/images/
开头的URI的请求,服务器将从/data/images
目录发送文件。 例如,响应http://localhost/images/logo.png
请求,nginx将发送服务上的/data/images/logo.png
文件。 如果文件不存在,nginx将发送一个指示404
错误的响应。 不以/images/
开头的URI的请求将映射到/data/www
目录。 例如,响应http://localhost/about/example.html
请求时,nginx将发送/data/www/about/example.html
文件。
要应用新配置,如果尚未启动nginx或者通过执行以下命令将重载信号发送到nginx的主进程:
[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload
如果错误或异常导致无法正常工作,可以尝试查看目录
/usr/local/nginx/logs
或/var/log/nginx
中的access.log
和error.log
文件中查找原因。
打开浏览器或使用CURL访问Nginx服务器如下所示 -
完整的nginx.conf
文件配置内容如下:
#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;
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 {
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
}
4. 设置简单的代理服务器
nginx的一个常见用途是将其设置为代理服务器,这意味着它可作为一个接收请求的服务器,将其传递给代理服务器,从代理服务器中检索响应,并将其发送给客户端。
我们将配置一个基本的代理服务器,它为来自本地目录的文件提供图像请求,并将所有其他请求发送到代理的服务器。 在此示例中,两个服务器将在单个nginx
实例上定义。
首先,通过向nginx配置文件添加一个server
块来定义代理服务器,其中包含以下内容:
server {
listen 8080;
root /data/up1;
location / {
}
}
这将是一个监听端口8080
的简单服务器(以前,由于使用了标准端口80
,所以没有指定listen
指令),并将所有请求映射到本地文件系统上的/data/up1
目录。 创建此目录并将index.html
文件放入其中。 请注意,root
指令位于server
块上下文中。 当选择用于服务请求的location
块不包含自己的root
指令时,将使用此root
指令。
在上面创建的目录/data/up1
中放入一个文件:/data/www/demo.html
,文件的内容就一行,如下 -
<h2>About proxy_pass Page at port 8080</h2>
接下来,使用上一节中的服务器配置进行修改,使其成为代理服务器配置。 在第一个位置块中,将proxy_pass
指令与参数中指定的代理服务器的协议,名称和端口(在本例中为http://localhost:8080
):
server {
location / {
proxy_pass http://localhost:8080;
}
location /images/ {
root /data;
}
}
我们将修改当前使用/images/prefix
将请求映射到/data/images
目录下的文件的第二个location
块,使其与典型文件扩展名的图像请求相匹配。 修改后的位置块如下所示:
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
该参数是一个正则表达式,匹配所有以.gif
,.jpg
或.png
结尾的URI。正则表达式之前应该是~
字符。 相应的请求将映射到/data/images
目录。
当nginx选择一个location
块来提供请求时,它首先检查指定前缀的location
指令,记住具有最长前缀的location
,然后检查正则表达式。 如果与正则表达式匹配,nginx会选择此location
,否则选择之前记住的那一个。
代理服务器的最终配置将如下所示:
server {
location / {
proxy_pass http://localhost:8080/;
}
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}
此服务器将过滤以.gif
,.jpg
或.png
结尾的请求,并将它们映射到/data/images
目录(通过向root
指令的参数添加URI),并将所有其他请求传递到上面配置的代理服务器。
要应用新配置,如果尚未启动nginx或者通过执行以下命令将重载信号发送到nginx的主进程:
[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload
首先测试上面配置的 8080
端口的服务,访问服务的8080
端口,得到以下结果:
再次访问 80
端口(这里只是一个代理,它会把请求转发给8080
的服务,由8080
端口这这个服务处理并返回结果到客户端),得到以下结果 -
完整的配置nginx.conf
文件内容如下 -
#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;
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 {
listen 8080;
root /data/up1;
location / {
}
}
## 代理配置,数据转发
server {
location / {
proxy_pass http://localhost:8080/;
}
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}
}
5. 设置FastCGI代理
nginx可用于将请求路由到运行使用各种框架和PHP等编程语言构建的应用程序的FastCGI服务器。
使用FastCGI服务器的最基本nginx配置包括使用fastcgi_pass
指令(而不是proxy_pass
指令),以及fastcgi_param
指令来设置传递给FastCGI
服务器的参数。 假设FastCGI
服务器可以在localhost:9000
上访问。 以上一节的代理配置为基础,用fastcgi_pass
指令替换proxy_pass
指令,并将参数更改为localhost:9000
。 在PHP中,SCRIPT_FILENAME
参数用于确定脚本名称,QUERY_STRING
参数用于传递请求参数。 最终的配置将是:
server {
location / {
fastcgi_pass localhost:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
}
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}
这将设置一个服务器,将除静态图像请求之外的所有请求路由到通过FastCGI协议在localhost:9000
上运行的代理服务器。
Nginx快速入门的更多相关文章
- Nginx快速入门菜鸟笔记
Nginx快速入门-菜鸟笔记 1.编译安装nginx 编译安装nginx 必须先安装pcre库. (1)uname -a 确定环境 Linux localhost.localdomain 2.6. ...
- 【代理是什么?】nginx快速入门+反向代理hexo个人博客
@ 目录 前言 本文说明 请大家务必查看 工作原理 正向代理 反向代理 环境准备 详细版 入门:搭建步骤 配置阿里云epel源: yum安装nginx: 启动nginx: 配置default.conf ...
- Nginx 极简教程(快速入门)
作者:dunwu github.com/dunwu/nginx-tutorial 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计模式内容聚合 4. ...
- ELK快速入门(五)配置nginx代理kibana
ELK快速入门五-配置nginx代理kibana 由于kibana界面默认没有安全认证界面,为了保证安全,通过nginx进行代理并设置访问认证. 配置kibana [root@linux-elk1 ~ ...
- Yii2框架RESTful API教程(一) - 快速入门
前不久做一个项目,是用Yii2框架写一套RESTful风格的API,就去查了下<Yii 2.0 权威指南 >,发现上面写得比较简略.所以就在这里写一篇教程贴,希望帮助刚接触Yii2框架RE ...
- nginx配置入门
谢谢作者的分享精神,原文地址:http://www.nginx.cn/591.html nginx配置入门 之前的nginx配置是对nginx配置文件的具体含义进行讲解,不过对于nginx的新手可能一 ...
- 【云计算】Dockerfile、镜像、容器快速入门
Dockerfile.镜像.容器快速入门 1.1.Dockerfile书写示例 Dockerfile可以用来生成Docker镜像,它明确的定义了Image的生成过程.虽然直接修改容器也可以提交生成镜像 ...
- 【个人笔记】003-PHP基础-01-PHP快速入门-03-PHP环境搭建
003-PHP基础-01-PHP快速入门 03-PHP环境搭建 1.客户端(浏览器) IE FireFox CHROME Opera Safari 2.服务器 是运行网站的基本 是放置程序代码的地方 ...
- 【个人笔记】001-PHP基础-01-PHP快速入门-01-PHP职业路线及PHP前景
001-PHP基础-01-PHP快速入门 01-PHP职业路线及PHP前景 PHP职业路线 PHP初级工程师 1年以下 3k-6k PHP中级工程师 1-3年6k-10k PHP高级工程师 3年以上 ...
随机推荐
- Spring@PostConstruct注解和构造方法的调用顺序
先看下@PostConstruct的注解 * The PostConstruct annotation is used on a method that needs to be executed * ...
- Loj_6282. 数列分块入门 6
Loj_6282 这个题目涉及到了块的重构,这里使用了\(\sqrt{n}\)次插入便重构的方法 讲重复的操作提出来做了函数 #include <iostream> #include &l ...
- Java单例模式几种实现方式
在平时的工作.学员的学习以及面试过程中,单例模式作为一种常用的设计模式,会经常被面试官问到,甚至笔试会要求学员现场默写,下面将会就单例模式的实现思路和几种常见的实现方式进行简单的分享. 单例模式,是一 ...
- javascript对象定义及创建
javascript对象 定义 javascript中的对象,可以理解成是一个键值对的集合,键是调用每个值的名称,值可以是基本变量,还可以是函数和对象. 创建方法 第一种方法 通过顶级Object类来 ...
- Fpm启动机制及流程分析———详细
FPM(FastCGI Process Manager)是PHP FastCGI运行模式的一个进程管理器,从它的定义可以看出,FPM的核心功能是进程管理,那么它用来管理什么进程呢?这个问题就需要从Fa ...
- PHP中的递增/递减运算符
看这段代码 <?php $a=10; $b=++$a; //此语句等同于 ; $a=$a+1 ; $b=$a echo $a."<br>"; echo $b; ? ...
- 树莓派安装DNSMASQ服务
功能: DNSMASQ是一款高性能的.小型的DNS服务器软件. * 缓存域名.IP地址,本地缓存解析的地址. * DHCP服务 1.安装 sudo apt-get update sudo apt-ge ...
- Altium Designer (AD) 中规则的部分讲解
当创建好PCB时,选择 Design - Rules 即可进行规则的设置,也可以直接利用快捷键D-R(多利用快捷键,可以有效的提高设计效率,) 这个是规则的总界面,熟练以后可以直接从这里进行修改,很便 ...
- 重学Veriliog(2)——高级编程语句
1.判断 1.1 if ... else ... 有优先级 在组合逻辑电路中,需要避免产生Latch(避免结构不完整) Latch容易引起竞争冒险,同时静态时序分析工具也不好分析穿过Latch的路径? ...
- leetcode记录-回文数
判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...