Nginx
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx相关的知识,希望对你有一定的参考价值。
入门项目:
集群
负载均衡
LNMP代表的就是:Linux系统下nginx+mysql+php这种网站服务器架构。
企 业 级 电 子 商 务 网 站 大 多 是 是 基 于 LNMP行的网站服务端架构。
(Linux+Nginx+MySQL+PHP)架构设计的,是目前国际上流LNMP架构具有轻量、跨平台、高性能等特点,能支持高并发请求。
Nginx作为Web服务器,使用web服务功能,可将请求传递给PHP应用服务,PHP应用服务执行脚本,从后端Mysql取得数据,
生成响应返回给Nginx,最后由Nginx将响应返回用户。
/etc 下存放配置文件 /lib 下存放库文件 /bin,/sbin下存放程序 /share下存放文本
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是
由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0
发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性
、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有
内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx
网站用户有:百度、京东、新浪、网易、腾讯、淘宝等目前淘宝在nginx做了二次开发:tengine
跨平台:Nginx 可以在大多数 Unix like OS编译运行,而且也有Windows
的移植版本。配置异常简单,非常容易上手。配置风格简单,神一般的配
置易读性
高并发连接:数据复制时,官方测试能够支撑5万并发连接,在实际生产环
境中跑到2~3万并发连接数.(这得益于Nginx使用了最新的epoll模型)通信
机制采用epoll模型,支持更大的并发连接。
master/worker结构:一个master进程,生成一个或多个worker进程
功能模块化: nginx的内部结构是由核心部分和一系列的功能模块所组成
这样划分是为了使得每个模块的功能相对简单,便于开发,同时也便于
对系统进行功能扩展。
成本低廉:Nginx可实现负载均衡功能,可以免费使用。而购买F5 BIG-IP
NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币
内置的健康检查功能:如果 Nginx Proxy 后端的某台 Web 服务器宕机了,
不会影响前端访问。
节省带宽:有缓存模块,支持 GZIP 压缩,可实现浏览器本地缓存的
Header 头。
稳定性高:用于反向代理(负载均衡),宕机的概率微乎其微
Nginx模块主要有4种角色:
(1) core(核心模块):构建nginx基础服务、管理其他模块。
(2) handlers(处理模块): 用于处理HTTP请求,然后产生输出。
(3) load-balancers(负载均衡模块):当有多于一台的后端备选服务器时,选择一台转发HTTP请求。
(4) filters(过滤模块): 过滤handler产生的输出。
nginx安装常用两种方式,yum安装和源码包
nginx的配置:主配置文件:nginx.conf
扩展相关配置文件:include conf.d/*.conf
协议配置:fastcgi, uwsgi,scgi等协议相关的配置文件
类型配置: mime.types:支持的mime
nginx的主配置文件路径:一般在/etc/nginx/nginx.conf下(yum安装)或者源码安装指定位置的conf目录下,
如/usr/local/nginx/conf/nginx.conf配置文件主要配置设置:main(全区设置)http(协议配置)upstream(负载均衡服务器设置)
和server、location(URL匹配特定位置设
1)全局配置
#Nginx的worker进程运行用户以及用户组
user nobody nobody;
#Nginx开启的进程数
worker_processes 2;
worker_processes auto;
#也可以下参数指定了哪个cpu分配给哪个进程,
#worker_processes 4 #4核CPU
#worker_cpu_affinity 0001 0010 0100 1000
#定义全局错误日志定义类型,[debug|info|notice|warn|crit]
error_log logs/error.log info;
#指定进程ID存储文件位置
pid logs/nginx.pid;
2)服务配置
非虚拟主机的配置或公共配置,需要定义在server之外,http之内;
http
{directive value;...
server {
}
server {
}
... }}
必须使用虚拟主机来配置站点;每个虚拟主机使用一个server {}段配置server
http段参数介绍:
1. #文件扩展名与文件类型映射表
2. include mime.types;
3. #默认文件类型
4. default_ type application/octet-stream;
5.#日志相关定义
6. #log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
7. # ‘$status $body_bytes_sent "$http_referer" ‘
8. # ‘"$http_user_agent" "$http_x_forwarded_for"‘;
9. #定义日志的格式。后面定义要输出的内容。
10. #1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;12. #2.$remote_user :用来记录客户端用户名称;
11. #3.$time_local :用来记录访问时间与时区;
12. #4.$request :用来记录请求的url与http协议;
13. #5.$status :用来记录请求状态;
14. #6.$body_bytes_sent :记录发送给客户端文件主体内容大小;
15. #7.$http_referer :用来记录从那个页面链接访问过来的;
16. #8.$http_user_agent :记录客户端浏览器的相关信息
17. #连接日志的路径,指定的日志格式放在最后。
18. #access_log logs/access.log main;
19. #只记录更为严重的错误日志,减少IO压力
20 error_log logs/error.log crit;http段参数
21. #默认编码 27. #charset utf-8;
22. #服务器名字的hash表大小
23. server_names_hash_bucket_size 128;
24. #客户端请求单个文件的最大字节数
25. client_max_body_size 8m;
26. #指定来自客户端请求头的hearerbuffer大小
27. client_header_buffer_size 32k;
28. #指定客户端请求中较大的消息头的缓存最大数量和大小。
29. large_client_header_buffers 4 64k;
30. #开启高效传输模式。
31. sendfile on;
32. #防止网络阻塞
33. tcp_nopush on;
34. tcp_nodelay on;
35. #客户端连接超时时间,单位是秒
36. keepalive_timeout 60;
37. #客户端请求头读取超时时间
38. client_header_timeout 10;
39. #设置客户端请求主体读取超时时间
40. client_body_timeout 10;
41. #响应客户端超时时间
42. send_timeout 10;
43.#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。
44. fastcgi_connect_timeout 300;
45. fastcgi_send_timeout 300
46. fastcgi_read_timeout 300
47. fastcgi_buffer_size 64k
48. fastcgi_buffers 4 64k
49. fastcgi_busy_buffers_size 128k;
50. fastcgi_temp_file_write_size 128k;
51.#gzip模块设置
52. #开启gzip压缩输出
53. gzip on;
54. #最小压缩文件大小
55. gzip_min_length 1k;
56. #压缩缓冲区
57. gzip_buffers 4 16k;
58. #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
59. gzip_http_version 1.0
60. #压缩等级 1-9 等级越高,压缩效果越好,节约宽带,但CPU消耗大
61. gzip_comp_level 2;
62. #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
63. gzip_types text/plain application/x-javascript text/css application/xml;
64. #前端缓存服务器缓存经过压缩的页面
65. gzip_vary on;
高性能的LNMP企业及应用实战:
实战项目一:实现基于LNMP的小米电子商务网站平台
LNMP的代表就是:
Nginx 是通过fastCGI进行调试
项目实践:
模块间接:
Nginx:Nginx是一个高性能的http和反向代理的服务器(负载均衡)
也是一个IMAP/pop3/smtp服务器
Nginx的四种模块: core handlers load-balancers filters
Nginx的安装方式: 源码安装和yum安装
yum install nginx
systemctl start nginx
netstart -tunlp |grep 80
主配置文件:/etc/nginx/nginx.conf
nginx -t 检查语法是否正确
cd /usr/share/nginx/html error_page 的存放路径
配置文件,程序,库,相关文档
查看CPU的数量:
# cat /proc/cpuinfo
Nginx实现路由-URL的重定向: vim /etc/nginx/nginx.conf server中进行配置
if判断指令
常见的全局变量:
小米实验的过程:rz xiaomi.gizp
1. yum install nginx mariadb php-fpm php-mysql
2. cd /etc/nginx
3. ls
4. cp nginx.conf.default nginx.conf
5. systemctl restart php-fpm
6. systemctl restart mariadb
7. cd /data/web
8. cd ebak
9. mysql -uroot -p create xiaomi
10. vim /etc/nginx/nginx.conf
11. vim /etc/php-fpm.d/www.conf
12. vim /etc/php.ini
13. cd /data/web
14. ls
15. ll
16. chown nobody.nobody . -R
17. ll
18. ll -d
19. systemctl restart nginx
20. nginx -t
21. vim /etc/nginx/nginx.conf
22. systemctl restart nginx
23. systemctl restart mariadb
24. systemctl restart php-fpm
25. iptables -F
26. cd /data/web
27. ls
28. vim /etc/nginx/nginx.conf
29. systemctl restart nginx
30. cd /data/web
31. ls
32. cd data
33. ls
34. vim config.php
35. systemctl restart nginx
#nginx -V 可查看nginx的相关加载文件路径,和Nginx的参数
配置status
vim /etc/nginx/nginx.conf
location /status {
stub_status on;
}
nginx -t
iptables -F
getenforce
systemctl start php-fpm
systemctl start mariadb
systemctl start nginx
浏览器访问 :172.17.0.154/status
计划任务的存放路径:/etc/crontab
Nginx.org/en/docs Nginx的相关文档
Nginx企业级性能优化:
定义操作系统的级别 soft警告 hard 底线
/etc/sercurity/limits.conf
ulimit -n 65535当前生效
在超时时间,缓存上都可进行优化
buffer 解决速度不匹配的问题 cache容量和速度的问题
php的优化:
/etc/php.ini
/etc/php-fpm.d/www.conf
php-fpm有两种工作模式: static(静态) dynameic(动态)
设置脚本超时时间
学会运用日志排错
1.Nginx和apache的区别在哪?
2.如何优化Nginx参数?
3.Nginx的日志格式是怎么样的?常见的日志参数有哪些?
4.在Nginx中,请说明Rewrite模块里break和last的区别?
5.Nginx的结构是怎么样的?如何工作的?
6.Nginx中配置location时匹配顺序是怎么样的?
7.如何用命令实现Nginx日志统计,得到访问ip最多的前10个
以上是关于Nginx的主要内容,如果未能解决你的问题,请参考以下文章