nginx的安装和配置文件详解以及初步调优

本文详细介绍了Nginx与Apache的区别,重点阐述了Nginx的性能优势,如epoll网络模型和轻量级特性。接着,文章详细讲解了Nginx的安装过程、常用指令、配置文件结构以及作为代理服务器的角色。还探讨了Nginx的调优模块,如limit_rate、open_file_cache等,以提升服务器性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

nginx与apache的区别,以及各自的优点

nginx安装

nginx使用指令:

nginx的配置

nginx作为代理服务器

其他的一些调优模块

 


Nginx是一款轻量级Web 服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在连接高并发的情况下,Nginx是Apache服务不错的替代品

学习nginx之前,我们来简单了解一下

nginx与apache的区别,以及各自的优点

nginx与apache在性能上的差别其本质在于nginx采用了epoll网络模型,相比较于apache的采用的select模型,epoll的优点在于它不需要轮询、没有最大并发连接的限制mmap内存映射、它最大的优点在于它只管理”活跃“的连接,跟总连接数无关,因此在实际的网络环境中,在高并发的情况下,epoll的效率会远高于select。

关于select、poll、epoll的更详细的区别可以参考:https://www.cnblogs.com/aspirant/p/9166944.html

nginx优点:

1、event-driven、mmap(内存映射)、sendfile传递机制

(关于mmap内存映射和sendfile传递方式的介绍,请关注我的另一篇文章:https://blog.youkuaiyun.com/keil_wang/article/details/86688271

2、nginx属于轻量级服务器,比起apache占用更少的内存及资源

3、nginx处理请求是异步非阻塞的,多个连接对应一个进程,而apache是阻塞型的,一个连接对应一个进程。所以在高并发下,nginx表现出低资源、低消耗、高性能的优势

4、静态处理有优势

apache优点:

1、模块众多

2、rewrite模块更加完善

3、动态处理有优势

4、apache支持php,如果接收到java请求,需要在apache后用tomcat做支撑,将java请求发送给tomca

总体来说,对性能要求高,首选nginx,对稳定性要求高,首选apache

-----------------------

nginx安装

在官网下载repo包

http://nginx.org/en/linux_packages.html#stable

yum clean all

yum -y install nginx

nginx使用指令:

-h  查看帮助选项

-V  查看版本和配置选项

-t   测试语法

-s   发送信号给master进程

nginx  -s stop/reload/quit/reopen   #常用指令

主进程(master)负责监控端口(80),协调工作进程的工作状态,分配工作任务,worker进程负责任务处理

nginx   #启动nginx

ps -ef |grep nginx

netstat -anpl  |grep nginx

测试:浏览器输入本机IP

-------------------------

nginx的配置

可参考官网文档:http://nginx.org/en/docs/   在该文档中,有每一个参数的详解以及示例,可打开如下图的字母检索方便查找

vim /etc/nginx/nginx.conf      #主配置文件

该配置文件采用模块化,包括 全局配置、事件模块、server模块、location模块。每一项参数都有特定的位置,有的参数可以配置在多个模块中,具体参考官方文档,下文中也会简单标注。

全局配置

event{   

}

http{        

      server{                          #配置一个虚拟主机,当主机较多时,可用include来区分

                location{             #针对路径做额外配置,也可在server块中

                }

      }

}

注意:每一行要以”;“封号结尾

全局配置

  user   nginx /nobody;

  worker_processes   2/auto;   worker进程数量,一般等于cpu个数

  worker_cpu_affinity  auto/0001 0010 0100 1000;   cpu亲和力,将进程和cpu绑定,提高缓存命中率

  worker_priority  20;  worker进程的优先级  【-20,20】

  worker_rlimit_nofile  65536;  worker进程能够打开文件数量的上限值(worker_processes*worker_connections)


调优:linux的初始最大打开文件数为 1024,当负载(并发量)较大时,会出现 error:too many open files    因此,可适当调节

ulimit  -n  查看系统当前的最大打开文件数

vim /etc/security/limits.conf   #修改最大打开文件数

* soft    nofile   65535

* hard   nofile    65536

* soft    noproc  65536   #所有用户打开进程数的最大值为65535

@student hard   noproc  65536

*表示所有用户,@针对某个用户做限制

注意:

a、所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max

b. nofile的soft limit不能超过其hard limit

c. nofile的hard limit不能超过/proc/sys/fs/nr_open


  error_log  /var/log/nginx/error.log;   

  pid   /run/nginx.pid;      指定nginx主进程PID的文件路径

  daemon   on/off;  是否使用守护进程,默认on,后台执行。off:前台,适用于测试环境

  include    file;        指定其他配置文件

}

事件

events{  

  worker_connections  30000;   每个w进程能够打开的最大并发连接数量

  use   epoll;   并发连接请求的处理方法,nginx的优势就在于epoll的处理方法

  multi_accept  on/off;    默认为on

on:一个连接只唤醒一个Worker,其他处于休眠,适用于并发量小时

off:一个连接会唤醒所有W(惊群),直到分配完,未连接的继续休眠,适用于高并发量,提高效率

}

http{

sendfile    on;  是否调用sendfile函数来输出文件,在内核中封装,直接发送

tcp_nodelay  on/off 

on:  不延时发送,来一个请求发送一个,提高用户体验

off:延时发送,多个请求合并后一起发送,节省服务器资源

server_tokens  on/off/build/string  是否显示nginx版本信息,可在http、server、location模块中

ssl    仅能够通过ssl连接

backlog=number     超过最大并发连接数后,新的请求进入后援队列

rcvbuf=size              接收缓冲区大小

sndbuf=size             发送缓冲区大小

include   file;

     server {          //配置一个虚拟主机,当主机较多时,可用include来区分

          listen   80;  (default_server)可将IP地址和端口绑定,127.0.0.1:80;   

          server_name   www.a.com;  支持多种写法, 通配符、正则表达式等

          root  /data/aaa;    网站路径  也可在http、location模块

          index  file;   默认页面

                   location /news {          #针对路径做额外配置,也可在server块中

                             root  /test/aaa;   访问的是/test/aaa下的news,而不是/data/aaa下的news

                             try_files  $uri file;  默认文件页面  

                             limit_except GET        #除了DET之外的其他方法,仅允许192.168.10.10访问,仅location

                             allow  192.168.10.10;

                             deny all;

                            }

                    }

        error_page  404 =200 /404.html 错误页面,(响应码改为200,防止被劫持)

                   location /404.html{

                                root  /data/aaa/error;  在/data/aaa/error/404.html文件中编写错误页面

                   }

        keepalive_timeout  time;  保持连接超时时长

        keepalive_requests number;  一次长连接上允许请求的最大数量,默认为100

        keepalive_disable  none...   禁用长连接

        send_timeout  time;  向客户端发响应报文的超时时长

        client_body_buffer_size size;  接受用户请求报文body部分的缓冲区大小,默认为16k,若超过,被暂存到磁盘上,路径由client_body_temp_path定义

        client_body_temp_path  /var/test  1 2 2

1  一级目录,占1位16进制,0-f 共16个目录

2  二级目录,占2位16进制,00-ff 共16*16=256个目录

2  三级目录,占2位16进制,00-ff 共16*16=256个目录

例:某文件名的哈希值为...45764d,则他的存储位置为,/var/test/d/64/57   

      }    #server块(标注以下括号,参数实在太多了。。。)

}       #http块

 

----Location中alias 别名  ,与root的区别

root ,给定的路径对应location中的/url/左侧的/

alias ,给定的路径对应location中的/url/右侧的/

location /bbs/ {

root  /web/forum/;     访问的是:/web/forum/bbs/index.html

}

location /bbs/ {

alias  /web/forum/;     访问的是:/web/forum/index.html

}

nginx作为代理服务器

http {

.....

              upstream server-1 {

                       server 192.168.142.160:8080     ##8080端口是tomcat的web服务端口

              }

    server {      ##server块可用include另外写

            listen  80;

            server_name  www.a.com;

                 location / {

                         proxy_pass  http://server-1;

                         index  index.html index.htm;

                }

     }

}

反向代理流程:浏览器输入www.a.ocm,通过域名解析到192.168.142.161(nginx服务器),进而匹配到sever_name为www.a.com的server块,通过proxy_pass将请求转发到upatream server-1,也就是tomcat服务器

其他的一些调优模块

h、s、l表示该参数可在http、server、location中配置)

1、limit_rate    rate;  限制响应客户端的传输速率,单位:bytes/second  默认为0,表示不限制,(h、s、l)

2、aio   on/off;   是否启用异步IO,默认off  (h、s、l)

3、directio  size /off;  直接IO,达到指定的size,直接写磁盘,而非写缓存(h、s、l)

4、缓存文件相关模块

nginx服务器收到用户请求后从系统内核读取到的文件,将被缓存  (h、s、l)

open_file_cache  off;

open_file_cache  max=N[inactive=time]

N:可缓存的缓存项上限  inactive=time:此时长内未被命中或命中次数小于open_file_cache_min_uses所指定的次数时,成为非活动项,将被删除

open_file_cache_min_uses  number;  默认为1

open_file_cache_errors   on/off;  是否缓存 查找时发生错误的文件           

open_file_cache_valid   time;  缓存项有效性的检查频率,默认为60s

5、访问控制模块   

location / {     #按顺序检查,一般将精确的放在前面

deny  192.168.1.1;

allow  192.168.1.0/24;

allow   10.1.1.0/16;

deny   all;

}

6、身份验证模块,即访问页面时会提示输入用户名和密码,借助httpd-tools生成

auth_basic    string/off;     默认off 。(h、s、l)

auth_basic  “admin“;    字符串,自定义

auth_basic_user_file  /etc/nginx/nginxuser;

针对特定文件验证:

location  /admin {

auth_basic  “admin “;字符串,自定义

auth_basic_user_file  /etc/nginx/nginxuser;

}

httpd-tools工具提供,生成加密文件

htpasswd  -cm  nginxuser httpuser1

回车,提示创建密码,可创建多个用户,第二次创建时,不用加-c参数

7、状态页模块(nginx服务器运行状态)

location  /status  {

stub_status;      {s、l)

deny ...     针对用户做限制,不能访问status

}

状态页信息:

Active connections:当前状态,连接数

accepts:已接收的客户端请求总数

handles:已处理的客户端请求总数

requests:客户端发来的请求分数

Reading:正在读取请求报文首部的连接数

Writing:正在向客户端发送响应报文的连接数

Waiting:正在等待请求的空闲连接数

8、访问日志模块

log_format  name string...;     string为格式定义,参考官方文档(h)

access_log   path /off;       调用日志格式,配合log_format使用(h、s、l)

[format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]

例:access_log  /etc/log/nginx/access.log  test ;  此处的test就是log_format 中的name(自定义格式的名称)

9、日志缓存

open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];  (h、s、l)

与open_file_cache 类似

open_log_file_cache off;   默认off

例:open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

10、压缩模块(压缩响应数据) (h、s、l)

gzip  on/off;

gzip_comp_level  number;  压缩级别,1-9,默认1

gzip_disable    指定浏览器不压缩

gzip_min_length  length;  响应报文大于这个值时启用压缩

gzipz_types ...;  指定对那些类型的资源进行压缩,默认包含text/html,所以不用写这两个类型

gzip_vary on | off;  压缩的提示字段   即是否显示”Vary: Accept-Encoding”,默认off

如有错误,敬请指正~~

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值