轻量级web服务器nginx学习(1)———nginx详解

文章目录

  • 1.什么是nginx?
  • 2.nginx与apache的异同?
  • 3.nginx目录详解
  • 4.nginx的配置文件结构框架
  • 5.nginx的配置文件参数详解
  • 6.nginx版本号的隐藏

1.什么是nginx?

  Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名

2.nginx与apache的异同?

  • Nginx
    (1)轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源
    (2)抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服务的现象。
    (3) nginx 处理静态文件好,静态处理性能比 apache 高三倍以上
    (4)nginx 的设计高度模块化,编写模块相对简单
    (5)nginx 配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,apache 配置复杂 ,重启的时候发现配置出错了,会很崩溃
    (6)nginx 作为负载均衡服务器,支持 7 层负载均衡;nginx 本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器
    (7)启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级, 社区活跃,各种高性能模块出品迅速

  • Apache
    (1) apache 的 rewrite 比 nginx 强大,在 rewrite 频繁的情况下,用 apache
    (2)apache 发展到现在,模块超多,基本想到的都可以找到
    (3)apache 更为成熟,少 bug ,nginx 的 bug 相对较多
    (4)apache 超稳定,apache 仍然是目前的主流,拥有丰富的特性,成熟的技术和开发社区
    (5)apache 对 PHP 支持比较简单,nginx 需要配合其他后端用
    (6)apache 在处理动态请求有优势,nginx 在这方面是鸡肋,一般动态请求要 apache 去做,nginx 适合静态和反向。

总结

两者最核心的区别在于 apache 是同步多进程模型,一个连接对应一个进程,而 nginx 是异步的,多个连接(万级别)可以对应一个进程

一般来说,需要性能的 web 服务,用 nginx 。如果不需要性能只求稳定,更考虑 apache ,后者的各种功能模块实现得比前者,例如 ssl 的模块就比前者好,可配置项多。
转载

3.nginx目录详解

当解压nginx安装包后会生成,nginx相应目录:

在这里插入图片描述

(1)auto 目录中:
cc目录:编译,os目录:判断操作系统类型,lib和type目录:存放库文件,辅助编译
(2)CHANGES 跟以前版本的对比
(3)CHANGES.ru  俄罗斯版本的changes (作者是俄罗斯的)
(4)conf  存放配置文件,会copy到编译好的配置文件中
(5)configure  编译完的运行脚本
(6)contrib  提供语法检测的字体
(7)html  默认发布目录,存放默认的正确的和错误的访问页面
(8)LICENSE   版权声明
(9)man  帮助文档
(10)README  手册,指定了官网网址
(11)src  源码目录 里面都是源码的东西

4.nginx的配置文件结构框架

轻量级web服务器nginx学习(1)———nginx详解_第1张图片
 
(1)main全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
(2)events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
(3)http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
(4)server块:配置虚拟主机的相关参数,一个http中可以有多个server。
(5)location块:配置请求的路由,以及各种页面的处理情况。

5.nginx的配置文件参数详解

(1)定义Nginx运行的用户和用户组为nginx

#指的是worker的工作控制组是nginx用户,是为了保证系统的安全性。新建nginx用户及用户组
user  nginx nginx;

在这里插入图片描述
(2)进程数设定

#进程数,即处理请求的进程(熟称负责接客的服务员),服务中的进程数应该与实际硬件相匹配;初始可设置为cpu总核数如:worker_processes 8;
worker_processes  8;

轻量级web服务器nginx学习(1)———nginx详解_第2张图片
在这里插入图片描述
轻量级web服务器nginx学习(1)———nginx详解_第3张图片
(3)全局错误日志定义类型

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#把进程号记录到文件,用于管理nginx进程
#pid        logs/nginx.pid;

(4)Nginx的事件模型中的最大打开文件数

#Nginx的事件模型中的最大打开文件数,可设置为系统优化后的ulimit-HSn的结果,
即1024可改为65535,然后在/etc/security/limits.conf文件中修改,因为该文中是默认的nginx的连接数,
只需在该文件中修改即可
events {
    worker_connections  1024;      #nginx的最大连接数=worker连接数*worker进程数
}

轻量级web服务器nginx学习(1)———nginx详解_第4张图片
轻量级web服务器nginx学习(1)———nginx详解_第5张图片
轻量级web服务器nginx学习(1)———nginx详解_第6张图片
(5)对页面的加速加载与压缩

 gzip  on; ##开启后,加载页面更迅速,并且会压缩页面

在这里插入图片描述
轻量级web服务器nginx学习(1)———nginx详解_第7张图片
(6)对并发连接的限制

    #limit_conn_zone 用来限制同一时间连接数,即并发限制
    #limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 “leaky bucket” 
    $binary_remote_addr是限制同一客户端ip地址
    zone=one:10m表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频次信息
    # 定义一个名为addr的limit_conn_zone $binary_remote_addr是限制同一客户端ip地址

    #以下两条语句写在server之上
    limit_conn_zone $binary_remote_addr zone=addr:10m; #大小是10M内存 10M的内存来对于IP传输开销
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; #1s中不超过一个请求
    ...

        location / {
            root   html;
            index  index.html index.htm;
        }

	location /download {
	    limit_conn addr 1;	##只能一个并发,多了会报错
	    limit_rate 50k;	##限制带宽,每秒最多50k
	}

轻量级web服务器nginx学习(1)———nginx详解_第8张图片
测试效果(在另一台主机进行压力测试):
轻量级web服务器nginx学习(1)———nginx详解_第9张图片
轻量级web服务器nginx学习(1)———nginx详解_第10张图片
(7)对客户端请求速度的限制

location /download {
	  #  limit_conn addr 1;	##只能一个并发,多了会报错
	    limit_rate 50k;	##限制带宽,每秒最多50k
	}

测试效果(压力测试):
轻量级web服务器nginx学习(1)———nginx详解_第11张图片
(8)http模块的设置部分

http {
    include       mime.types;    #文件扩展名与文件类型映射表
    default_type  application/octet-stream;   #默认文件类型

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '      #定义日志的记录格式
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;    #开启高效文件传输模式,实现内核零copy
    #tcp_nopush     on;       #激活tcp_nopush参数可以允许把httpresponseheader和文件的开始放在一个文件里面发布,减少网络报文段的数量

    #keepalive_timeout  0;   #连接超时时间,单位是秒
    keepalive_timeout  65;

    #gzip  on;    #gzip压缩,对于网站优化极其重要

#设置基于域名的虚拟主机部分
    server {
        listen       80;    #监听的端口,也可以是172.25.254.1:80形式
        server_name  localhost;   #域名

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {      #默认访问的location标签段
            root   html;   #站点根目录,即网站程序存放的目录
            index  index.html index.htm;      #首页排序
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
       #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {     #符合php扩展名的请求调度到fcgi server
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;     #抛给本机的9000端口(php fastcgi server)
        #    fastcgi_index  index.php;    #设定动态首页
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;     #设定和fastcgi交互的参数包含文件
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

#http虚拟主机
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

6.nginx版本号的隐藏

vim /root/nginx/nginx-1.15.9/src/core/nginx.h  ##修改相应配置文件

需要注意的是:如果想要隐藏版本号,这一配置需要在编译安装之前操作否则编译完成后,不能修改

轻量级web服务器nginx学习(1)———nginx详解_第12张图片在这里插入图片描述

你可能感兴趣的:(nginx,nginx详解,nginx配置文件结构详解,nginx与apache的区别,什么是nginx)