[转帖]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 ...
随机推荐
- C++中自定义结构体或类作为关联容器的键
目录 1. 概述 2. 实例 1. 概述 STL中像set和map这样的容器是通过红黑树来实现的,插入到容器中的对象是顺序存放的,采用这样的方式是非常便于查找的,查找效率能够达到O(log n).所以 ...
- 华为云推出全自研数据库,GaussDB(openGauss)能否撑起一片天?
摘要:GaussDB(openGauss) 基于华为云底座,能够快速全球化部署,同时支持用户的本地化部署诉求,跟云上生态工具紧密结合让用户在迁移.开发.运维上省时省心. GaussDB(openGau ...
- 云图说|图解制品仓库CodeArts Artifact
摘要:制品仓库用于存放由源码编译生成的.可运行的二进制文件,重要作用是实现制品文件的可信存储,支撑软件开发活动. 本文分享自华为云社区<[云图说]第277期 图解制品仓库CodeArts Art ...
- 云小课|MRS基础原理之Flink组件介绍
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:Flink是一个批 ...
- 跟我读论文丨ACL2021 NER BERT化隐马尔可夫模型用于多源弱监督命名实体识别
摘要:本文是对ACL2021 NER BERT化隐马尔可夫模型用于多源弱监督命名实体识别这一论文工作进行初步解读. 本文分享自华为云社区<ACL2021 NER | BERT化隐马尔可夫模型用于 ...
- 10倍!BoostKit鲲鹏全局缓存3大创新技术助力Ceph性能提升
摘要:本文从四个方面阐述了BoostKit鲲鹏全局缓存技术,该技术针对Ceph开源存储方案存在的痛点,采用三大创新技术,有效的提高了Ceph的性能,最高可以将Ceph性能提升10倍. 本文分享自华为云 ...
- 开心档之C++ 数据结构
C++ 数据结构 C/C++ 数组允许定义可存储相同类型数据项的变量,但是结构是 C++ 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项. 结构用于表示一条记录,假设您想要跟踪图书馆 ...
- HTML 首页 欢迎页
HTML 首页 欢迎页,将下面代码复制出来,贴到HTML中,直接运行 <!DOCTYPE html> <html lang="en"> <head&g ...
- MySQL 数据分组后取第一条数据
SQL SERVER数据分组后取第一条数据--PARTITION BY -- 不加 distinct(a.id) order by 会有问题 导致获取出来的数据不对 SELECT id,title,d ...
- PPT 毕业答辩:学术风格的PPT
PPT 毕业答辩:学术风格的PPT 合适字体 便于阅读, 封面.标题 楷体.华康俪金黑.粗宋体.思源宋体.中山行书 正文 宋体.仿宋.微软雅黑.思源黑体 主题色 学术红.严谨紫.科学蓝 跟着LOGO ...