[转帖]Nginx 使用与异常处理
http://jartto.wang/2017/04/15/nginx-exception-handling/
以前总是偷懒使用 Http-Server 来启动一个本地服务,后来花时间学习了一下 Nginx,感觉挺好用。总结整理一下,就当打点存档了。
一、简单介绍
Nginx — Ngine X,是一款自由的、开源的、高性能 HTTP 服务器和反向代理服务器;也是一个 IMAP 、POP3 、SMTP 代理服务器;也就是说 Nginx 本身就可以托管网站(类似于 Tomcat 一样),进行 Http 服务处理,也可以作为反向代理服务器使用。
Nginx 解决了服务器的 C10K(就是在一秒之内连接客户端的数目为10k即1万)问题。它的设计不像传统的服务器那样使用线程处理请求,而是一个更加高级的机制—事件驱动机制,是一种异步事件驱动结构。
Nginx 有一个主线程( master process)和几个工作线程(worker process)。主线程的目的是加载和验证配置文件、维护工作线程。
工作线程处理实际的请求,Nginx 采用基于事件的模型和依赖操作系统的机制在工作线程之间高效地分发请求。工作线程的数量可配置,也可自动调整为服务器 CPU 的数量。
二、搞懂正向代理和反向代码
正向代理:
首先,代理服务器一般指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服务器一般作用在客户端。例如:GoAgent FQ软件。我们的客户端在进行FQ操作的时候,我们使用的正是正向代理,通过正向代理的方式,在我们的客户端运行一个软件,将我们的 HTTP 请求转发到其他不同的服务器端,实现请求的分发。反向代理:
反向代理服务器作用在服务器端,它在服务器端接收客户端的请求,然后将请求分发给具体的服务器进行处理,然后再将服务器的相应结果反馈给客户端。Nginx 就是一个反向代理服务器软件。
三、Nginx 安装与使用
这里我已 Mac 安装举例:
1 |
brew search nginx |
Nginx 及其模块的工作方式由配置文件确定。 默认情况下,配置文件名为 nginx.conf,放在 /usr/local/nginx/conf 、/etc/nginx 或者 /usr/local/etc/nginx 文件夹中。
安装完,打开浏览器,访问 localhost:8080 ,页面出现欢迎语 Welcome to nginx!,则说明安装成功。
四、Nginx 查看配置
1 |
nginx -t |
当你执行 nginx -t 的时候,Nginx 会去测试你得配置文件得语法,并告诉你配置文件是否写得正确,同时也告诉了你配置文件得路径,如下:
1 |
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok |
通过 vim 查看与编辑配置文件:
vim /usr/local/etc/nginx/nginx.confıg |
启动 Nginx:
1 |
nginx |
重启 Nginx:
1 |
nginx -s reload |
退出 Nginx:
1 |
nginx -s quit |
五、Nginx 配置文件
通过 vim /usr/local/etc/nginx/nginx.confıg 打开 Nginx 配置文件:
1 |
#定义 Nginx 运行的用户和用户组 |
深入了解,请参考:Config 配置详解
六、Nginx 配置 HTTPS
1 |
server {
|
七、Nginx 中使用 rewrite
1.Nginx Rewrite 基本标记( flags )
last - 基本上都用这个 Flag。
※相当于Apache里的[L]标记,表示完成 rewrite,不再匹配后面的规则
break - 中止 Rewirte ,不再继续匹配
redirect - 返回临时重定向的 HTTP 状态302
permanent - 返回永久重定向的 HTTP 状态301 ※原有的 url 支持正则,重写的 url 不支持正则
2.正则表达式匹配,其中:
- ~ 为区分大小写匹配
- ~* 为不区分大小写匹配
- !~和!~* 分别为区分大小写不匹配及不区分大小写不匹配
3.文件及目录匹配,其中:
- -f和!-f用来判断是否存在文件
- -d和!-d用来判断是否存在目录
- -e和!-e用来判断是否存在文件或目录
- -x和!-x用来判断文件是否可执行
4.Nginx 的一些可用的全局变量,可用做条件判断:
- $args
- $content_length
- $content_type
- $document_root
- $document_uri
- $host
- $http_user_agent
- $http_cookie
- $limit_rate
- $request_body_file
- $request_method
- $remote_addr
- $remote_port
- $remote_user
- $request_filename
- $request_uri
- $query_string
- $scheme
- $server_protocol
- $server_addr
- $server_name
- $server_port
- $uri
举个例子,将所有 ithov.com 与 netseek.ithov.com 域名全部自跳转到 http://www.ithov.com
1 |
server |
深入了解,请参考:
Nginx Rewrite 和 Redirect 模块配置方法说明
Nginx rewrite 指令
Nginx 中文文档
八、Nginx open 异常
1 |
nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory) |
解决方法:
1 |
[root@localhost nginx]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf |
使用 nginx -c 的参数指定 nginx.conf 文件的位置
1 |
[root@localhost nginx]# cd logs/ |
总用量 12
-rw-r--r-- 1 root root 1246 12月 9 18:10 access.log |
可以看到 nginx.pid 文件已经有了,之后执行 nginx -s reload 重启 Nginx,问题搞定。
九、Nginx 启动异常
当我们运行 nginx -s reload 的时候,会报这样的错误:
1 |
nginx: [alert] kill(647, 1) failed (3: No such process) |
这是因为,我们并没有启动 Nginx 服务,执行 nginx 命令启动服务。
十、invalid PID number
在 Mac 上用 brew 安装 Nginx,然后修改 Nginx 配置文件,再重启时报出如下错误:
1 |
nginx: [error] invalid PID number “” in “/usr/local/var/run/nginx/nginx.pid” |
解决方案:
1 |
$ sudo nginx -c /usr/local/etc/nginx/nginx.conf |
十一、Nginx 403 forbidden 原因
引起 nginx 403 forbidden 可能有二种原因,具体如下:
1.缺少 index.html 或者 index.php 文件
1 |
server {
|
如果在 /home/jartto/www 下面没有 index.php,index.html 的时候,直接访问域名,找不到文件,会报 403 forbidden 。
2.权限问题详情请参考
因为权限问题引起的403,比较难查找,但是值得我们注意。
1 |
server {
|
可以看到, web 目录放在用户的所属目录下面,Nginx 的启动用户默认是 Nginx的,所以对目录根本没有读的权限,这样就会报403错误了。
解决方案:
这个时候,把 web 目录的权限改大,或者是把 Nginx 的启动用户改成目录的所属用户,重启一下。
十二、Nginx 资源汇总
[转帖]Nginx 使用与异常处理的更多相关文章
- [转帖]Nginx rewrite模块深入浅出详解
Nginx rewrite模块深入浅出详解 https://www.cnblogs.com/beyang/p/7832460.html rewrite模块(ngx_http_rewrite_modul ...
- [转帖]nginx服务器安装及配置文件详解
nginx服务器安装及配置文件详解 http://seanlook.com/2015/05/17/nginx-install-and-config/ 发表于 2015-05-17 | 更新于: 2 ...
- [转帖]nginx配置ssl加密(单/双向认证、部分https)
nginx配置ssl加密(单/双向认证.部分https) https://segmentfault.com/a/1190000002866627 nginx下配置ssl本来是很简单的,无论是去认证 ...
- [转帖]Nginx的超时keeplive_timeout配置详解
Nginx的超时keeplive_timeout配置详解 https://blog.csdn.net/weixin_42350212/article/details/81123932 Nginx ...
- [转帖]nginx upstream模块--负载均衡
nginx upstream模块--负载均衡 https://www.cnblogs.com/linjiqin/p/5494783.html Module ngx_http_upstream_modu ...
- [转帖]Nginx 的 TCP 负载均衡介绍
Nginx 的 TCP 负载均衡介绍 https://www.cnblogs.com/felixzh/ 前几天同事问 nginx的代理 当时以为只有http的 现在看起来还有tcp的可以使用tcp 代 ...
- [转帖]Nginx安装及配置详解 From https://www.cnblogs.com/zhouxinfei/p/7862285.html
Nginx安装及配置详解 nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP ...
- [转帖]Nginx 的配置文件详解.
nginx配置文件nginx.conf超详细讲解 https://www.cnblogs.com/liang-wei/p/5849771.html #nginx进程,一般设置为和cpu核数一样w ...
- [转帖]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件
nginx学习,看这一篇就够了:下载.安装.使用:正向代理.反向代理.负载均衡.常用命令和配置文件 2019-10-09 15:53:47 冯insist 阅读数 7285 文章标签: nginx学习 ...
- [转帖]Nginx rewrite 规则 与 proxy_pass 实现
Nginx rewrite 规则 与 proxy_pass 实现 https://www.cnblogs.com/jicki/p/5546916.html Nginx rewrite 规则 与 pr ...
随机推荐
- Centos 利用本地镜像安装yum源
前提 在"设置"中确保两点 1.勾选"已连接" 2.添加上本地的"centos.iso"镜像文件 切换到用户目录 cd / 新建一个iso目 ...
- ChatGPT的中转站(欧派API) oupuapi,不扶墙也能上楼
开启智能生活新篇章:oupo中转站(欧派)--引领人工智能大模型的枢纽 在人工智能技术日新月异的今天,我们荣幸地向您推介oupo中转站(欧派)--这一汇聚各类顶尖人工智能大模型的平台.它不仅为技术研发 ...
- 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 07.在C++中使用UMG
斯坦福 UE4 C++ ActionRoguelike游戏实例教程 07.在C++中使用UMG 斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 概述 本篇文章的目标是 ...
- FreeMark模板基本知识
FreeMarker模板基础知识 1.FreeMarker与jsp.Thymeleaf并排为三大模板引擎,用于把后端数据渲染到页面上,降低耦合度.动态数据+占位符+静态页面标签构成动态页面. 2.Fr ...
- STM32CubeMX教程14 ADC - 多通道DMA转换
1.准备材料 开发板(正点原子stm32f407探索者开发板V2.4) ST-LINK/V2驱动 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK ...
- 大数据实践解析(上):聊一聊spark的文件组织方式
摘要: 在大数据/数据库领域,数据的存储格式直接影响着系统的读写性能.Spark针对不同的用户/开发者,支持了多种数据文件存储方式.本文的内容主要来自于Spark AI Summit 2019中的一个 ...
- 互联网短平快下,DevCloud如何支撑软件开发的“转型”?
摘要:2013年踏入互联网浪潮的张浩,在8年的软件开发中,一一经历了这三段"历史进程",感受到技术迭代更新背后的魅力. 互联网改变人们的衣食住行,也在悄然无声间为根植之上的软件行业 ...
- 火山引擎 ByteHouse:双十一即将到来,如何用数据分析提升电商平台销售转化?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 "双十一"电商大促脚步渐近,各大平台的战火又将燃起.直播电商以低成本.高转化率等优势备受商家青 ...
- 分享个本地maven配置
用阿里云的快有点受不了了,经常有包下载不了 settings.xml <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0&q ...
- 精细化边缘安全防护:如何防止CDN域名被恶意刷量?
越是数字化时代,越要做好基建"安全"的顶层设计 随着消费及产业互联网的不断发展,数字化将实现全场景覆盖,人类的生活和生产方式也随之不断改变. 内容分发网络CDN(Content D ...