web服务器,Nginx介绍,Nginx命令,Nginx配置文件

Web服务器

什么是web服务

​ web就是B/S架构

  • Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以处理浏览器等Web客户端的请求并返回相应响应,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。

  • WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。WWW 是 Internet 的多媒体信息查询工具,是 Internet 上近年才发展起来的服务,也是发展最快和目前用的最广泛的服务。正是因为有了WWW工具,才使得近年来 Internet 迅速发展,且用户数量飞速增长。

网络模型(IO多路复用之select、poll、epoll)

  • epoll跟select都能提供多路I/O复用的解决方案。在现在的Linux内核里有都能够支持,其中epoll是Linux所特有,而select则应该是POSIX所规定,一般操作系统均有实现。
 select
    基本原理:select 函数监视的文件描述符分3类,分别是writefds、readfds、和exceptfds。调用后select函数会阻塞,直到有
            描述符就绪(有数据 可读、可写、或者有except),或者超时(timeout指定等待时间,如果立即返回设为null即可)函数
            返回。当select函数返回后,可以通过遍历fdset,来找到就绪的描述符。

    select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点。select的一个缺点在于单个进程能够监视的文件描
    述符的数量存在最大限制,在Linux上一般为1024,可以通过修改宏定义甚至重新编译内核的方式提升这一限制 ,但是这样也会
    造成效率的降低。

 poll
    基本原理:poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间 ,然后查询每个fd对应的设备状态,如果设备
            就绪则在设备等待队列中加入一项并继续遍历,如果遍历完所有fd后没有发现就绪设备,则挂起当前进程,直到设备就
            绪或者主动超时,被唤醒后它又要再次遍历fd。这个过程经历了多次无谓的遍历。

 epoll
    基本原理:epoll支持水平触发和边缘触发,最大的特点在于边缘触发,它只告诉进程哪些fd刚刚变为就绪态,并且只会通知一次。
            还有一个特点是, epoll使用“事件”的就绪通知方式  ,通过epoll_ctl注册fd,一旦该fd就绪,内核就会采用类似
            callback的回调机制来激活该fd ,epoll_wait便可以收到通知。

    epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。
    epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间
    的copy只需一次

参考链接:https://www.cnblogs.com/Anker/p/3265058.html

Web服务器软件

1、apache

  • Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。
# Apache 和 Nginx 功能对比
   Nginx和Apache一样,都是HTTP服务器软件,在功能实现上都采用模块化结构设计,都支持通用的语言接口,
   如PHP、Perl、Python等,同时还支持正向和反向代理、虚拟主机、URL重写、压缩传输、SSL加密传输等。

1.在功能实现上,Apache的所有模块都支持动、静态编译,而Nginx模块都是静态编译的,
2.对FastCGI的支持,Apache对Fcgi的支持不好,而Nginx对Fcgi的支持非常好;
3.在处理连接方式上,Nginx支持epoll,而Apache却不支持;
4.在空间使用上,Nginx安装包仅仅只有几百K,和Nginx比起来Apache绝对是庞然大物。

2、Nginx

  • Nginx (engine x) 是一个很强大的、高性能的HTTP和反向代理web服务器,同时也提供IMAP/POP3/SMTP服务。Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
  • Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows。Nginx有自己的函数库,并且除了zlib、PCRE和OpenSSL之外,标准模块只使用系统C库函数。而且,如果不需要或者考虑到潜在的授权冲突,可以不使用这些第三方库。
# 选择Nginx的优势所在

1. 作为Web服务器: Nginx处理静态文件、索引文件,自动索引的效率非常高。
2. 作为代理服务器,Nginx可以实现无缓存的反向代理加速,提高网站运行速度。
3. 作为负载均衡服务器,Nginx既可以在内部直接支持Rails和PHP,也可以支持HTTP代理服务器对外进行服务,
   同时还支持简单的容错和利用算法进行负载均衡。
4. 在性能方面,Nginx是专门为性能优化而开发的,在实现上非常注重效率。它采用内核Poll模型(epoll and kqueue ),
   可以支持更多的并发连接,最大可以支持对50 000个并发连接数的响应,而且只占用很低的内存资源。
5. 在稳定性方面,Nginx采取了分阶段资源分配技术,使得CPU与内存的占用率非常低。Nginx官方表示,Nginx保持10000个
   没有活动的连接,而这些连接只占用2.5MB内存,因此,类似DOS这样的攻击对Nginx来说基本上是没有任何作用的。
6. 在高可用性方面,Nginx支持热部署,启动速度特别迅速,因此可以在不间断服务的情况下,对软件版本或者配置进行升级,
   即使运行数月也无需重新启动,几乎可以做到7×24小时不间断地运行。

Nginx

d21fa

安装Nginx

1、yum安装
 [root@web01 ~]# vim /etc/yum.repos.d/nginx.repo
   [nginx-stable]
   name=nginx stable repo
   baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
   gpgcheck=1
   enabled=1
   gpgkey=https://nginx.org/keys/nginx_signing.key
   module_hotfixes=true

   [nginx-mainline]
   name=nginx mainline repo
   baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
   gpgcheck=1
   enabled=0
   gpgkey=https://nginx.org/keys/nginx_signing.key
   module_hotfixes=true
 [root@web01 ~]# yum install nginx -y
 [root@web01 ~]# systemctl stop httpd
 [root@web01 ~]# systemctl start nginx

2、二进制安装
    略......
  

3、编译安装
 [root@web01 ~]#  wget https://nginx.org/download/nginx-1.20.2.tar.gz
 [root@web01 ~]# tar -xf nginx-1.20.2.tar.gz
 [root@web01 nginx-1.20.2]# ./configure
 [root@web01 nginx-1.20.2]# make
 [root@web01 nginx-1.20.2]# make install

平滑增加Nginx模块

  • 众所周知Nginx是分成一个个模块的,比如core模块,gzip模块,proxy模块,每个模块负责不同的功能,除了基本的模块,有些模块可以选择编译或不编译进Nginx。官网文档中的Modules reference部分列出了nginx源码包的所有模块。我们可以按照自己服务器的需要来定制出一个最适合自己的Nginx服务器。

  • 除了Nginx官网源码包提供了各种模块,Nginx还有各种各样的第三方模块。官方文档NGINX 3rd Party Modules也列出了Nginx的很多第三方模块,除此官网列出的之外,还有很多很有用的模块也能在Github等网站上找到。

  • 这些模块提供着各种各样意想不到的功能,灵活使用Nginx的第三方模块,可能会有非常大的意外收获。

# 增加模块必须重新编译。
 [root@web01 ~]#  wget https://nginx.org/download/nginx-1.20.2.tar.gz
 [root@web02 ~]# tar -xf nginx-1.20.2.tar.gz
 [root@web02 ~]# cd nginx-1.20.2
 [root@web02 nginx-1.20.2]#./configure  --with-http_ssl_module
 [root@web02 nginx-1.20.2]# make 
 [root@web02 nginx-1.20.2]# make install

# 编译安装无法自动添加到环境变量,需要带上路径查看版本
 [root@web01 nginx-1.20.2]# /usr/local/nginx/sbin/nginx -v

# 查看配置参数
 [root@web02 nginx-1.20.2]# ./configure --help

# 增加模块,报错直接yum增加依赖即可
 [root@web02 nginx-1.20.2]# ./configure --with-http_ssl_module
 [root@web02 nginx-1.20.2]# make 
 [root@web02 nginx-1.20.2]# make install 

# 此时可以看见模块已经增加进去了
 [root@web01 nginx-1.20.2]# /usr/local/nginx/sbin/nginx -V

Nginx的命令

# -?,-h : 帮助
 [root@web01 ~]# nginx -h
  nginx version: nginx/1.20.2
  Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]
               [-e filename] [-c filename] [-g directives]

  Options:
  
 1、-v : 版本信息
  [root@web01 ~]# nginx -v
   nginx version: nginx/1.20.2

 2、-V : 版本和配置选项信息
  [root@web01 ~]# nginx -V
   nginx version: nginx/1.20.2
   built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
   built with OpenSSL 1.0.2k-fips  26 Jan 2017
   TLS SNI support enabled
   configure arguments: --prefix=/etc/nginx 
   ......
  
 3、-t : 检查配置文件是否有语法错误
  [root@web01 ~]# nginx -t
   nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
   nginx: configuration file /etc/nginx/nginx.conf test is successful

 4、-T : 测试配置文件并启动
  [root@web01 ~]# nginx -T
   nginx: the configuration file /etc/nginx/nginx.conf syntax is onginx: the configuration           file /etc/nginx/nginx.conf syntax is oTk
   nginx: configuration file /etc/nginx/nginx.conf test is successful
   # configuration file /etc/nginx/nginx.conf:

   user  nginx;
   worker_processes  auto;

   error_log  /var/log/nginx/error.log notice;
   pid        /var/run/nginx.pid;
   ......
 
 5、-q : 打印错误日志
  [root@web01 ~]# nginx -q
   nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
   nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
   nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

 6、-s : 指定Nginx启动配置(给nginx主进程发送信号)
    stop : 停止(快速关闭)
     [root@web01 ~]# nginx -s stop
    quit : 退出(正常关闭)
     [root@web01 ~]# nginx -s quit
    reopen : 重启
     [root@web01 ~]# nginx -s reopen
    reload : 重载
     [root@web01 ~]# nginx -s reload

 7、-p : 指定nginx的安装路径(默认是:/etc/nginx/)

 8、-e : 指定错误日志路径

 9、-c : 指定配置文件的路径(默认是:/etc/nginx/nginx.conf)

 10、-g : 设置一个全局的Nginx配置项
  [root@web01 ~]# nginx -g 'daemon off;'  #前端启动

Nginx配置文件

  • nginx分为全局配置和模块配置
#/etc/nginx/nginx.conf
-------------------- 全局配置(全局生效) -----------------
user  www;	#启动nginx work进程的用户名
worker_processes  auto;  #启动的worker进程数,auto === CPU数量

error_log  /var/log/nginx/error.log notice;  #错误日志路径
pid        /var/run/nginx.pid;  #pid的存放文件文件路径

-------------- 系统事件配置模块(全局生效) ---------------
events {	#事件配置模块
    worker_connections  1024;  #最大连接数(每一个worker进程最多同时接入多少个请求)
    use epool;  #指定Nginx的网络模型
}

-------------- Http请求模块(处理Http请求的模块) --------------
http {  #web服务的模块
    include       /etc/nginx/mime.types;  #加载外部的配置项(Nginx可以处理的文件类型)
    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  /var/log/nginx/access.log  main;	#访问日志

    sendfile        on;	 #tcp连接配置(高效读取文件)
    #tcp_nopush     on;

    keepalive_timeout  65;  #长链接配置(HTTP 1.0 短链接,HTTP 1.1 长连接)

    #gzip  on;  #压缩

    include /etc/nginx/conf.d/*.conf;  #包含其他文件
}

server {  #网址模块
    listen 80;  #监听的端口
    server_name 127.0.0.1;	#定义域名

    location / {  #访问路径
	root /blog;  #指定的站点目录(网址路径)
	index index.php;  #指定网址的索引文件
	} 

超级玛丽和象棋

1、上传代码
 # 定义目录
 [root@web01 ~]# cd /opt
 [root@web01 opt]# mkdir Super_Marie
  # 此时需要手动上传文件
 [root@web01 opt]# ll Super_Marie/
  总用量 176
  drwxr-xr-x 2 root root   329 1月   3 21:44 images
  -rw-r--r-- 1 root root  1703 1月   3 21:44 index.html
  -rw-r--r-- 1 root root 72326 1月   3 21:44 jquery.js
  -rw-r--r-- 1 root root 78982 1月   3 21:44 QAuIByrkL.js
  -rw-r--r-- 1 root root  4777 1月   3 21:44 VNkyVaVxUV.css
  -rw-r--r-- 1 root root  9539 1月   3 21:44 wNGu2CtEMx.js



2、编辑配置文件
[root@web01 opt]# vim /etc/nginx/conf.d/game.conf
server {
    listen 80;
    server_name game.test.com;
    location / {
        root /opt/Super_Marie;
        index index.html;
    }
}

3、测试配置文件是否正常
[root@web01 opt]# nginx -t
 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
 nginx: configuration file /etc/nginx/nginx.conf test is successful

4、重启Nginx
[root@web01 opt]# systemctl restart nginx 

5、Windows域名解析
C:\Windows\System32\drivers\etc\hosts
192.168.15.7 game.test.com


6、Mac域名解析
# 切换到root权限
  sudo -i
  
# 编辑/etc/hosts文件,在后面追加内容即可,:wq保存退出
  vim /etc/hosts
  172.16.1.7 game.test.com


posted @ 2022-01-04 22:23  山风有耳  阅读(359)  评论(0编辑  收藏  举报