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的主要内容,如果未能解决你的问题,请参考以下文章

NginxNginx配置REWRITE隐藏index.php

NginxNginx配置文件解析

NginxNginx基础操作

NginxNginx基础操作

NginxNginx基础操作

NginxNginx基础操作