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 主进程号