nginx

精彩博文:https://blog.csdn.net/u014749862/article/details/50522276

                  https://blog.csdn.net/yf3585595511/article/details/54933646

一、nginx简介

nginx是轻量级、高性能的web server;主要做两件事:

(1)直接作为http server(代替apache);

(2)另一个功能就是作为反向代理服务器实现负载均衡;

          A、可以实现同一服务不同服务器的负载均衡

          B、也可以实现不同服务不同服务器的负载均衡

二、nginx组成及工作原理:

nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。

Nginx的模块从结构上分为核心模块、基础模块和第三方模块:

核心模块:HTTP模块、EVENT模块和MAIL模块

基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块,

第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块。

Nginx的模块从功能上分为如下三类:

Handlers(处理器模块)。此类模块直接处理请求,并进行输出内容和修改headers信息等操作。Handlers处理器模块一般只能有一个。

Filters (过滤器模块)。此类模块主要对其他处理器模块输出的内容进行修改操作,最后由Nginx输出。

Proxies (代理类模块)。此类模块是Nginx的HTTP Upstream之类的模块,这些模块主要与后端一些服务比如FastCGI等进行交互,实现服务代理和负载均衡等功能。

 Nginx本身做的工作实际很少,当它接到一个HTTP请求时,它仅仅是通过查找配置文件将此次请求映射到一个location block,而此location中所配置的各个指令则会启动不同的模块去完成工作,因此模块可以看做Nginx真正的劳动工作者。通常一个 location中的指令会涉及一个handler模块和多个filter模块(当然,多个location可以复用同一个模块)。handler模块负 责处理请求,完成响应内容的生成,而filter模块对响应内容进行处理。

 

三、nginx配置

(1)nginx的配置文件所在位置:

nginx的log文件是在nginx配置文件中配置的;默认是/var/log/nginx/error.log

(2)配置文件内容:

 

 

 

 (3)问题及解决办法

         A、因为配置文件出错了

               我们可以使用nginx -t方法查看配置文件出错的地方。

               也可以通过查看Nginx日志定位到Nginx重启失败的原因,Nginx日志文件的路径一般在:/var/log/nginx目录下,这个路径可以在配置文件中配置;

         B、端口被占用

               netstat -anp|grep 端口号

         C、403Forbidden错误

               nginx配置好后,访问页面出现403Forbidden错误,可以查看错误日志来判断问题所在,在nginx.conf文件中执行了错误日志文件名,默认是/var/log/nginx/error.log。

               使用命令 tail /var/log/nginx/error.log查看;如果发现有类似index.html failed (13::Permission denied)的信息,通常是nginx用户权限和网站目录文件用户权限不一致的原因(因为网站目录文件的所属用户通常是xxx或root,而nginx的默认工作进程用户是nginx,这可以在nginx.conf文件中修改),我的解决办法是不修改nginx.conf,而是以root用户登录,同时把网站目录文件放在/usr/share/nginx/xxx下(保证所有文件的所属用户都是root),之后重启nginx,就可以正常访问了。

 

四、实际项目使用

例如在之前的项目中用到的:

同一区域内hlr负载均衡采用的是nginx+redis+oracle

不同区域内hlr通信采用的是hlragent+activeMQ

实现数据同步:

redis内存数据库、oracle为物理数据库

利用redis的发布订阅机制,同步不同主机上的redis(不同应用服务器上分别部署redis就是为了减少网络延迟,进一步提高查询速度;)

oracle数据库采用的是读写分离,主从同步,主写,从读,主从同步;

 

五、nginx常用命令

nginx常用命令:

sudo nginx #打开 nginx
nginx -s reload|reopen|stop|quit  #重新加载配置(配置文件被修改后需要执行它)|重启|停止|退出 nginx
nginx -t   #测试配置是否有语法错误

nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]

-?,-h           : 打开帮助信息
-v              : 显示版本信息并退出
-V              : 显示版本和配置选项信息,然后退出
-t              : 检测配置文件是否有语法错误,然后退出
-q              : 在检测配置文件期间屏蔽非错误信息
-s signal       : 给一个 nginx 主进程发送信号:stop(停止), quit(退出), reopen(重启), reload(重新加载配置文件)
-p prefix       : 设置前缀路径(默认是:/usr/local/Cellar/nginx/1.2.6/)
-c filename     : 设置配置文件(默认是:/usr/local/etc/nginx/nginx.conf)
-g directives   : 设置配置文件外的全局指令

nginx 服务器重启命令,关闭
nginx -s reload :修改配置后重新加载生效
nginx -s reopen :重新打开日志文件
nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否正确

关闭nginx:
nginx -s stop :快速停止nginx
quit :完整有序的停止nginx

其他的停止nginx 方式:

ps -ef | grep nginx

kill -QUIT 主进程号 :从容停止Nginx
kill -TERM 主进程号 :快速停止Nginx
pkill -9 nginx :强制停止Nginx

 

启动nginx:
nginx -c /path/to/nginx.conf

平滑重启nginx:
kill -HUP 主进程号

  

posted on 2018-09-09 12:25  欢喜等大年  阅读(97)  评论(0编辑  收藏  举报

导航