[转帖]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 ...
随机推荐
- libGDX游戏开发之Sprite、Texture和TextureRegion绘制旋转、反转(九)
libGDX游戏开发之Sprite.Texture和TextureRegion绘制反转(九) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm- ...
- Java并发(二十二)----wait notify的正确姿势
开始之前先看看,sleep(long n) 和 wait(long n) 的区别: 1) sleep 是 Thread 的静态方法,而 wait 是 Object 的方法 2) sleep 不需要强制 ...
- 《RAPL: A Relation-Aware Prototype Learning Approach for Few-Shot Document-Level Relation Extraction》阅读笔记
代码 原文地址 预备知识: 1.什么是元学习(Meta Learning)? 元学习或者叫做"学会学习"(Learning to learn),它是要"学会如何学 ...
- 2021-01-14:timsort是什么,如何用代码实现?
福哥答案2021-01-14: 答案来自此链接: 介绍: timsort是一种混合.稳定高效的排序算法,源自合并排序和插入排序,旨在很好地处理多种真实数据.它由Tim Peters于2002年实施使用 ...
- 避坑指南:关于SPDK问题分析过程
[前言] 这是一次充满曲折与反转的问题分析,资料很少,代码很多,经验很少,概念很多,当内核态,用户态,DIF,LBA,大页内存,SGL,RDMA,NVME和SSD一起迎面而来的时候,问题是单点的意外, ...
- 数仓性能优化:倾斜优化-表达式计算倾斜的hint优化
本文分享自华为云社区<GaussDB(DWS)性能调优:倾斜优化-表达式计算倾斜的hint优化>,作者: 譡里个檔 . 1.原始SQL SELECT TMP4.TAX_AMT, CATE. ...
- 中秋节,华为云AI送上超级大月亮制作教程,体验赢开发者键鼠套装
摘要:一键"Run in ModelArts",无需考虑计算资源.环境的搭建,简单运行代码,即可拥有你的超级大月亮,打造专属于你的梦幻中秋月夜. 本文分享自华为云社区<中秋节 ...
- JS引擎(1):JS引擎擂台赛,JavaScript引擎的特征比较及术语科普
上篇介绍过JavaScript引擎的历史,<JS引擎(0):起底各种JavaScript引擎群雄争霸之路> 一些流行的 JavaScript 引擎 SpiderMonkey ,Brenda ...
- 数据智能——DTCC2022!中国数据库技术大会即将开幕
关注DTCC有几年了,还是在当中学到了很多的干货.今年我的大部分时间也都是投入在了数据治理的学习和数据治理工具的调研中.也非常渴望有这种机会去了解一下国内顶尖公司这方面的前沿技术与应用. DTCC ...
- C# CRC8
C# CRC8 C# /// /// This enum is used to indicate what kind of checksum you will be calculating. /// ...