Nginx 从入门到放弃(一)
Nginx
nginx的使用场景
静态资源服务
通过本地文件系统提供服务
反向代理服务
nginx的强大性能
缓存
负载均衡
API服务
OpenResty
nginx优点
高并发、高性能
可扩展性好
高可靠性
热部署
BSD许可证
nginx的安装
详见官方文档
nginx的启动,停止和重载
nginx有一个主进程和一些工作进程,主进程的目的是读取执行配置和维持工作进程。nginx的默认配置文件在/usr/local/nginx/conf或/etc/nginx中
nginx的启动
# 执行nginx可执行文件
$ nginx
同时也可以通过参数 -s 进行控制
nginx -s signal
允许的信号量
stop —— 快速停止
quit —— 优雅的停止
reload —— 重新载入配置文件
reopen —— 重新打开日志文件
例如,等待工作进程完成当前请求后去停止nginx进程,这个命令可以被执行
nginx -s quit
这个命令应该被用在已经开启nginx的用户上
改变配置文件不提交,直到重载配置的命令发送给nginx或已经重启。去重新载入配置,执行
nginx -s reload
主进程接收到去重载的配置信号后,它会检查新的配置文件的语法是否合法并尝试去应用所提供的配置,若应用成功,主进程将开启新的工作进程并发送信息给旧工作进程,请求它去关闭。否则,主进程就会回滚这个改变并继续用旧配置工作。旧工作进程接收到一个关闭命令后,停止接收新连接并继续去服务当前请求直到所有请求已经服务完毕。之后,旧进程退出。
一个信号量也可能被发送给nginx进程通过unix工具的帮助,比如kill。在这种情况下,信号被定向发送给一个进程通过所给的进程号。nginx主进程的进程号被写入,默认nginx.pid在/usr/local/nginx/logs or /var/run目录下。比如,如果主进程id是1628,发送QUIT信号导致nginx 优雅关闭,执行:
kill -s QUIT 1628
获取所有nginx运行的进程,可以用ps命令,用这种方式
ps -ax |grep nginx
获取更多nginx信号量的信息,去nginx的控制
配置文件的结构
nginx 是由被配置文件提供的指令控制的模块组成的。这些指令分为简单指令和块指令。简单指令由名字和用空格分离的参数和用于结束的;组成的。块指令和简单指令结构相同,但取代分号用于结束的方式的是一个额外的用{}围绕的结构。如果块指令有其他指令在{}里面,它被称为上下文。(例如:events,http,server和location)
指令放置在配置文件所有被认为是主要上下文的上下文外部。events和http指令处于main上下文中,server在http中,location在server中。
一行中# 后面的内容被认为是评论
# nginx.conf
events {}
http {
server {
location {
}
}
}
服务的静态内容
一个重要的web服务任务就是提供文件(例如:图片或静态html页面)。你将执行一个例子,依赖于请求,文件将被提供从不同的本地目录中:/data/www(这个可能包含html文件)和/data/images(包含图片)。这些将要求编辑配置文件并启动一个在http块内的server块,里面包含两个location块。
首先,创建/data/www目录和放入一个有文本内容的Index.html文件,并且创建一个/data/images目录并放入一些图片文件在里面。
接下来,打开配置文件。默认的配置文件已经包含几个server块的例子,和大部分注释。现在注释掉所有的这些块,开始一个新的server块:
http {
server {
}
}
通常,配置文件可能包含几个server块,通过它们listen的端口和server names。一旦nginx决定哪个server进程处理请求,它测试请求头指定的uri,根据在server块中location指令定义的参数。
将以下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;
}
}
这是一个已经工作的服务配置,它监听标准端口80,并且可以通过http://localhost/.访问本地。响应以/images/开头的请求,这个服务将发送文件从/data/images目录。例如响应以http://localhost/images/example.png 的请求,nginx将发送/data/images/example.png文件。如果这文件不存在,nginx将返回一个带404错误的响应。不以/images/开始的请求将映射到/data/www目录。例如,响应以http://localhost/some/example.html的请求,nginx将发送/data/www/some/example.html文件
要应用新配置,请启动nginx(如果尚未启动)或通过执行以下命令将重新加载信号发送到nginx的主进程:
nginx -s reload
以防一些事情不能像所期待的工作,你可以尝试在access.log和error.log中找原因,在/usr/local/nginx/logs or /var/log/nginx.中
设置简单的代理服务器
nginx的一个常见用途是将其设置为代理服务器,这意味着服务器接收请求,将它们传递给代理服务器,从中检索响应,然后将它们发送给客户
我们将配置一个基本代理服务器,它使用来自本地目录的文件处理图像请求,并将所有其他请求发送到代理服务器。在此示例中,将在单个nginx实例上定义两个服务器。
首先,通过向nginx的配置文件添加一个服务器块来定义代理服务器,其中包含以下内容:
server {
listen 8080;
root /data/up1;
location / {
}
}
这将是一个侦听端口8080的简单服务器(之前,自使用标准端口80以来尚未指定listen指令)并将所有请求映射到本地文件系统上的/ data / up1目录。创建此目录并将index.html文件放入其中。请注意,root指令放在服务器上下文中。当选择用于提供请求的位置块不包括自己的根指令时,使用这样的根指令。
nginx实现负载均衡
# conf/nginx.conf
upstream tomcat_server{
server 192.168.1.2:8080 weight=1;
server 192.168.1.3:8080 weight=1;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://tomcat_server;
}
}
Nginx 从入门到放弃(一)的更多相关文章
- Nginx从入门到放弃-第2章 基础篇
2-1 什么是Nginx 2-2 常见的中间件服务 2-3 Nginx的特性_实现优点1 2-4 Nginx特性_实现优点2 2-5 Nginx特性_实现优点3 2-6 Nginx特性_实现优点4 2 ...
- Nginx从入门到放弃-第3章 场景实战篇
3-1场景实践篇内容介绍: 3-2 Nginx作为静态资源Web服务_静态资源类型: 3-3 Nginx作为静态资源web服务_CDN(内容分发网络)场景: 3-4 Nginx作为静态资源Web服务_ ...
- Nginx从入门到放弃-第5章 Nginx架构篇
5-1 Nginx常见问题_架构篇介绍 5-2 Nginx常见问题_多个server中虚拟主机读取的优先级 5-3 Nginx常见问题_多个location匹配的优先级1 5-4 Nginx常见问题_ ...
- Nginx从入门到放弃-第4章 深度学习篇
4-1 Nginx动静分离_动静分离场景演示 4-2 Nginx动静分离_动静分离场景演示1 4-3 Nginx的动静分离_动静分离场景演示2 4-4 Rewrite规则_rewrite规则的作用 4 ...
- Nginx 从入门到放弃(五)
nginx的rewrite重写 nginx具有将一个路由经过加工变形成另外一个路由的功能,这就叫做重写. 重写中用到的指令 if (条件) {} 设定条件,再进行重写 set # 设定变量 retur ...
- Nginx 从入门到放弃(四)
前面我们学习了nginx的基本操作和日志管理,今天我们学习一下生产环境经常会用到的路由定位location设置,在工作中,经常可能会出现怎么设置的路由访问不到网页呀?总是出现404错误啊,这些都很有可 ...
- Nginx 从入门到放弃(三)
今天来学习nginx的日志管理,并通过日志脚本来切割日志并保存. nginx日志管理 在nginx中设置日志格式 http { log_format main '$remote_addr - ...
- Nginx 从入门到放弃(二)
学习完了nginx的基本知识后,我们来了解下nginx的虚拟主机. 说到虚拟主机,那就得说一说虚拟主机的三种方式了 基于端口的虚拟主机 基于域名的虚拟主机 基于ip的虚拟主机 基于端口实现虚拟主机 只 ...
- 后端API入门到放弃指北
后端API入门学习指北 了解一下一下概念. RESTful API标准] 所有的API都遵循[RESTful API标准]. 建议大家都简单了解一下HTTP协议和RESTful API相关资料. 阮一 ...
随机推荐
- Java实现 LeetCode 287 寻找重复数
287. 寻找重复数 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数.假设只有一个重复的整数,找出这个重复的数. 示例 ...
- Java实现 LeetCode 96 不同的二叉搜索树
96. 不同的二叉搜索树 给定一个整数 n,求以 1 - n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 ...
- 第九届蓝桥杯JavaC组省赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.哪天返回 题目描述 小明被不明势力劫持.后被扔到x星站再无问津.小明得知每天都有飞船飞往地球,但需要108元的船票,而他却身无分文. ...
- Java实现 蓝桥杯 历届试题 波动数列
问题描述 观察这个数列: 1 3 0 2 -1 1 -2 - 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加a或者减少b ...
- 用户和用户组管理-影子文件shadow
ll /etc/shadow 由于shadow文件的权限,所以,只有root可以读 vi /etc/shadow 一共有九列信息: 第一列表示用户名:第二列表示经过加密之后的密码,如果密码是!!或者* ...
- (前言一)HTTP报文
01 概述 客户端与服务器端之间的通信,通过HTTP协议,以HTTP报文的形式来实现数据的交互. HTTP报文是HTTP通信时发送的数据块,本文主要从以下几个方面介绍HTTP报文:HTTP报文结构.方 ...
- react后台管理系统路由方案及react-router原理解析
最近做了一个后台管理系统主体框架是基于React进行开发的,因此系统的路由管理,选用了react-router(4.3.1)插件进行路由页面的管理配置. 实现原理剖析 1.hash的方式 ...
- Python抽象类以及元类
抽象基类: 继承的约束与协议 __doc__ = """ 抽象基类: 继承的约束与协议 # 抽象基类 --- 有点java的味道,也有点golang的味道,继承,协议,接 ...
- 03.Java的前世今生
C&C++ 1972年C诞生 ◆贴近硬件,运行极快,效率极高. ◆操作系统,编译器,数据库,网络系统等 ◆指针和内存管理 1982年C++诞生 ◆面向对象 ◆兼容C ◆图形领域.游戏等 背景 ...
- 使用iText生成pdf文件
前言 折腾了一早上的iText,下面主要介绍一下如何使用iText通过java代码生成pdf文档,以及如何输出包含中文的pdf文档. 首先,要说明的是,我用的是iText-7(java),下载链接是: ...