当前位置: 首页 > 科技观察

小白Nginx30分钟入门指南

时间:2023-03-17 14:25:25 科技观察

Nginx是一个轻量级的web服务器/反向代理服务器和邮件(IMAP/POP3)代理服务器,基于类BSD协议发布。其特点是占用内存少,并发能力强。事实上,nginx的并发能力在同类web服务器中确实表现的更好。中国大陆使用nginx网站的用户有:百度、京东、新浪、网易、腾讯、淘宝等,为什么要使用Nginx?目前,Nginx的主要竞争对手是Apache。这里我将两者做一个简单的对比,帮助大家更好的了解Nginx的优势。1、作为Web服务器:Nginx与Apache相比,使用的资源更少,支持的并发连接数更多,体现出更高的效率,这使得Nginx特别受到虚拟主机提供商的青睐。在高连接并发的情况下,Nginx是Apache服务器的一个很好的替代品:Nginx是美国虚拟主机业务老板们经常选择的软件平台之一,最高可以支持响应5万并发连接。感谢Nginx,我们选择了epoll和kqueue作为开发模型。Nginx作为负载均衡服务器:Nginx可以直接支持Rails和PHP程序对内对外提供服务,也可以作为HTTP代理服务器对外提供服务。Nginx是用C写的,在系统资源开销和CPU使用效率上都比Perlbal好很多。2、Nginx配置简单,Apache复杂:Nginx非常容易启动,几乎可以7*24不间断运行,即使运行几个月也不需要重启。您还可以在不中断服务升级的情况下进行软件版本升级。Nginx的静态处理性能是Apache的3倍以上。Apache对PHP的支持比较简单。Nginx需要与其他后端一起使用。Apache的组件比Nginx多。3、核心区别在于:apache是??同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级)可以对应一个进程。4、两者擅长的领域是:nginx的优势是处理静态请求,CPU内存占用率低,apache适合处理动态请求,所以现在一般前端都用nginx作为反向proxy抗压,apache做后端处理动态请求。Nginx系统平台的基本使用:CentOSrelease6.6(Final)64位。1、安装编译工具和库文件2、首先安装PCRE1。PCRE的作用是让Nginx支持Rewrite功能。下载PCRE安装包,下载地址:http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz2、解压安装包:3、进入安装包目录4、编译并安装5、检查pcre版本3、安装Nginx1,下载Nginx,下载地址:http://nginx.org/download/nginx-1.6.2.tar.gz2,解压安装包3、进入安装包目录4、编译安装5、查看nginx版本到这里,nginx安装完成。4、Nginx配置创建Nginx使用的用户www运行:配置nginx.conf,将/usr/local/webserver/nginx/conf/nginx.conf替换为以下内容检查配置文件ngnix.conf命令的正确性:5、启动NginxNginx启动命令如下:6、访问站点从浏览器访问我们配置的站点ip:Nginx常用命令说明1.main全局配置nginx的一些与具体业务功能无关的参数(如作为http服务或email服务代理)在运行时,例如工作进程数,运行标识等woker_processes2配置文件的***main部分,worker角色中的worker进程数,主进程接收请求并将其分配给工作人员进行处理。这个值比较简单,可以设置为CPU核数grep^processor/proc/cpuinfo|wc-l,这也是一个自动值。如果启用了ssl和gzip,应该设置为与逻辑CPU数量相同甚至两倍,这样可以减少I/O操作。如果nginx服务器还有其他服务,可以考虑适当减少。worker_cpu_affinity也写在主要部分。在高并发的情况下,设置cpustickiness,减少多CPU核心切换导致的寄存器现场重构带来的性能损失。比如worker_cpu_affinity0001001001001000;(四核)。worker_connections2048写在events部分。每个工作进程可以并发处理(发起)的最大连接数(包括与客户端或后端代理服务器的所有连接)。nginx作为反向代理服务器,计算连接数=worker_processes*worker_connections/4,所以这里的client连接数是1024,能不能增加到8192无所谓,视情况而定,但是不能超过后面的worker_rlimit_nofile。当nginx作为http服务器时,计算公式除以2,worker_rlimit_nofile10240写在main部分。默认不设置,可以限制在操作系统的最大限制65535。使用epoll写在events部分。在Linux操作系统下,nginx默认使用epoll事件模型。得益于此,nginx在Linux操作系统下相当高效。同时,Nginx在OpenBSD或FreeBSD操作系统上使用了类似于epoll的高效事件模型kqueue。仅当操作系统不支持这些高效模型时才使用select。2、http服务器提供一些与提供http服务相关的配置参数。例如:是否使用keepalive,是否使用gzip压缩等。sendfileon启用高效文件传输模式,sendfile命令指定nginx是否调用sendfile函数输出文件,减少用户空间到内核的上下文切换空间。对于普通应用,将其设置为开。如果用于下载等磁盘IO负载大的应用,可以设置为off,以平衡磁盘和网络I/O处理速度,降低系统负载。keepalive_timeout65:长连接超时时间,单位秒,这个参数很敏感,涉及到浏览器的类型,后端服务器的超时设置,操作系统的设置,可以另起文章。当长连接请求大量小文件时,可以减少重建连接的开销。但是如果上传大文件,65秒内没有上传完成就会失败。如果设置时间过长,用户较多,长时间保持连接会占用大量资源。send_timeout:用于指定响应客户端的超时时间。此超时限制为两次连接活动之间的时间,如果超过此时间而客户端没有任何活动,Nginx将关闭连接。client_max_body_size10m客户端可以请求单个文件的最大字节数。如果有大文件上传,请设置其限制值client_body_buffer_size128kbuffer代理缓冲客户端请求的最大字节数模块http_proxy:该模块实现了nginx作为反向代理服务器的功能,包括缓存功能(详见也是文章)proxy_connect_timeout60nginx与后端服务器连接超时(代理连接超时)proxy_read_timeout60连接成功后,与后端服务器两次成功响应操作之间的超时时间(代理接收超时)proxy_buffer_size4k设置代理服务器(nginx)从后端realserver读取和保存用户头信息的缓冲区大小,默认与proxy_buffers大小相同。其实可以把这个命令的值设置小一些proxy_buffers432kproxy_buffersbuffer,nginx缓存来自后端realserver的单个连接的响应,如果平均网页在32k以下,像这样设置proxy_busy_buffers_size。64kbuffersizeunderhighload(proxy_buffers*2)proxy_max_temp_file_size当proxy_buffers无法容纳后端服务器的响应内容时,一部分会保存到硬盘的临时文件中。该值用于设置最大临时文件大小,默认为1024M,与proxy_cache无关。如果大于这个值,就会从上游服务器发回。设置为0以禁用。proxy_temp_file_write_size64k缓存服务器响应临时文件时,该选项限制每次写入临时文件的大小。proxy_temp_path(编译时可以)指定写入哪个目录。proxy_pass,proxy_redirect参见位置部分。Modulehttp_gzip:gzipon:开启gzip压缩输出以减少网络传输。gzip_min_length1k:设置允许压缩的最小页面字节数,页面字节数从header的content-length中获取。默认值为20。建议设置字节数大于1k,小于1k压力可能会增加。gzip_buffers416k:设置系统获取若干缓存单元,用于存放gzip压缩后的结果数据流。416k表示以16k为单位,安装原始数据大小为16k单位的4倍申请内存。gzip_http_version1.0:用于标识http协议的版本。早期的浏览器不支持Gzip压缩,用户会看到乱码。因此,添加此选项以支持以前的版本。如果你使用Nginx的反向代理,并且期望开启Gzip压缩,请设置为1.0,因为终端通信是http/1.0。gzip_comp_level6:gzip压缩率,1压缩率是处理速度最小,9压缩率***但处理速度最慢(传输快但耗cpu)gzip_types:匹配压缩的mime类型,是否指定,"text/html"类型将始终被压缩。gzip_proxiedany:当Nginx作为反向代理时,启用它来决定是否启用或禁用对后端服务器返回结果的压缩。匹配的前提是后端服务器必须返回一个包含“Via”的header。gzip_varyon:跟httpheader有关系。AVary:Accept-Encoding将添加到响应头中,以允许前端缓存服务器缓存gzip压缩的页面。例如,使用Squid来缓存Nginx压缩的数据。.3、服务器虚拟主机http服务支持多个虚拟主机。每个虚拟主机都有对应的服务器配置项,其中包含与虚拟主机相关的配置。在提供邮件代理服务时,也可以建立多台服务器。每个服务器通过监听地址或端口来区分。listen监听端口,默认为80,如果小于1024,应该以root身份启动。可以是listen*:80、listen127.0.0.1:80等形式server_name服务器名,比如localhost、www.example.com,可以用正则表达式匹配。http_stream模块使用简单的调度算法实现客户端IP到后端服务器的负载均衡。upstream后面是负载均衡器的名称,后端realserver以host:portoptions;的形式组织在{}中。如果只代理一个后端,也可以直接写在proxy_pass中。4、locationhttp服务中,对应某些特定的url的一系列配置项。root/var/www/html定义服务器的默认网站根目录位置。如果locationURL匹配的是子目录或文件,root没有作用,一般放在server命令中或/下。indexindex.jspindex.htmlindex.htm定义路径下默认访问的文件名,一般跟在root后面放proxy_passhttp:/backend请求到backend定义的服务器列表,即反向代理,对应上游负载均衡器。也可以proxy_passhttp://ip:port。proxy_redirectoff;proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;这四个暂时这样设置。另文解读。关于位置匹配规则的写法,可以说是特别关键和基础的。参考文章nginx配置位置总结和rewrite规则编写;可以有多个allow和deny,分别允许或禁止访问某个ip或ip段,依次满足任意一个规则则停止匹配。例如:我们也经常使用httpd-devel工具的htpasswd来设置访问路径的登录密码:这样就生成了一个默认用CRYPT加密的密码文件。打开nginx-status上面两行注释,重启nginx即可生效。5.2列出目录autoindexNginx默认不允许列出整个目录。如果需要这个功能,打开nginx.conf文件,添加autoindexon;在位置、服务器或http部分,并添加其他两个参数***:autoindex_exact_sizeoff;默认开启,显示文件的确切大小,单位是字节。改为off后,文件的大概大小以kB或MB或GB为单位显示autoindex_localtimeon;默认关闭,显示的文件时间为格林威治标准时间。改成on后,显示的文件时间为文件的服务器时间