从零开始的Nginx [ 1 ] --- HTTP工作原理、Nginx安装与部署、全局参数设置、客户端限速

Nginx安装部署和配置管理


HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

一、HTTP 工作原理

HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器有:Nginx,Apache(httpd)服务器,IIS服务器(Internet Information Services)等。
Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP默认端口号为80,但是你也可以改为8080或者其他端口。

HTTP三点注意事项:

  • HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
  • HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

二、HTTP 消息结构

HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。
一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。
一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。

200 OK
该请求已成功。成功的含义取决于HTTP方法:
GET:资源已被获取并在消息正文中传输。
HEAD:实体标头位于消息正文中。
PUT或POST:描述操作结果的资源在消息正文中传输。
TRACE:消息正文包含服务器接收到的请求消息。

301 Moved Permanently
所请求资源的URL已永久更改。新的URL在响应中给出。

302 Found
此响应代码表示所请求资源的URI已临时更改。将来可能会在URI中进行进一步的更改。因此,客户端在以后的请求中应使用相同的URI。

403 Forbidden
客户端无权访问内容;也就是说,它是未经授权的,因此服务器拒绝提供所请求的资源。与401不同,服务器知道客户端的身份。

404 Not Found
服务器找不到请求的资源。在浏览器中,这意味着无法识别URL。在API中,这也可能意味着端点有效,但是资源本身不存在。服务器也可以发送此响应而不是403,以隐藏来自未授权客户端的资源。由于此响应代码在网络上经常出现,因此可能是最著名的响应代码

500 Internal Server Error
服务器遇到了不知道如何处理的情况。

501 Not Implemented
服务器不支持请求方法,无法处理该请求方法。服务器需要支持的唯一方法(因此不能返回此代码)是GET和HEAD。

502 Bad Gateway
此错误响应表示服务器在充当网关以获取处理请求所需的响应时,收到无效响应。

503 Service Unavailable
服务器尚未准备好处理该请求。常见原因是服务器因维护而停机或过载。请注意,与此响应一起,应发送一个说明问题的用户友好页面。此响应应用于临时条件,并且Retry-After:HTTP报头应尽可能包含恢复服务之前的估计时间。网站管理员还必须注意与该响应一起发送的与缓存相关的标头,因为通常不应缓存这些临时条件响应。

504 Gateway Timeout
当服务器充当网关并且无法及时获得响应时,将给出此错误响应。

三、传递数据

下面实例是一点典型的使用GET来传递数据的实例:
客户端请求:

[root@kvm-node1 ~]# curl -v http://www.baidu.com

* About to connect() to www.baidu.com port 80 (#0)
* Trying 110.242.68.4...
* Connected to www.baidu.com (110.242.68.4) port 80 (#0)

> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.baidu.com
> Accept: */

服务端响应:

< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: keep-alive
< Content-Length: 2381
< Content-Type: text/html
< Date: Mon, 14 Dec 2020 06:26:25 GMT
< Etag: "588604c1-94d"
< Last-Modified: Mon, 23 Jan 2017 13:27:29 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/

四、Nginx 安装与部署

1、yum安装

yum -y install yum-utils

vim /etc/yum.repos.d/nginx.repo

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
yum -y install nginx 

2、编译安装

1 安装编译环境

yum -y install gcc gcc-c++

2 安装pcre软件包(使nginx支持http rewrite模块)

yum install -y pcre pcre-devel gd-devel

3 安装openssl-devel(使nginx支持ssl)

yum install -y openssl openssl-devel 

4 安装zlib

yum install -y zlib zlib-devel

5 创建用户nginx

useradd nginx 
passwd nginx

6 安装nginx

[root@localhost ~]# wget http://nginx.org/download/nginx-1.19.5.tar.gz
[root@localhost ~]# tar xzf nginx-1.19.5.tar.gz
[root@localhost ~]# cd nginx-1.19.5/
[root@localhost nginx-1.19.5]# ./configure --prefix=/usr/local/nginx --group=nginx --user=nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/tmp/nginx/client_body --http-proxy-temp-path=/tmp/nginx/proxy --http-fastcgi-temp-path=/tmp/nginx/fastcgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre --with-http_realip_module --with-stream
[root@localhost nginx-1.19.5]# make && make install

7 查看 nginx 安装的模块

[root@localhost ~]# /usr/local/nginx/sbin/nginx -V

8 修改配置文件

[root@localhost ~]# vim /etc/nginx/nginx.conf

五、全局参数设置

user nginx;        #设置nginx使用的用户

#设置nginx启动进程的数量,一般设置成与逻辑cpu数量相同,新版本支持 auto ,Nginx 将自动检测CPU核心数,并将worker process 数量设置成等同CPU核心数量
worker_processes  auto;          
error_log  logs/error.log;         #指定错误日志 
worker_rlimit_nofile 1024;         #设置一个nginx进程能打开的最大文件数
pid        /var/run/nginx.pid; 
events {
    
     
    worker_connections  1024;      #设置一个进程的最大并发连接数 
}

六、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  /var/log/nginx/access.log  main;    #设置访问日志的位置和格式 
    sendfile          on; #是否调用sendfile函数输出文件,一般设置为on,若nginx是用来进行磁盘IO负载应用时,可以设置为off,降低系统负载 
    # sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝
    gzip              on;      #是否开启gzip压缩,将注释去掉开启 
    keepalive_timeout  65;     #设置长连接的超时时间
## 虚拟服务器的相关设置 
server {
    
     
    listen      80;        #设置监听的端口 
    server_name  localhost;        #设置绑定的主机名、域名或ip地址 
    charset koi8-r;        # 设置编码字符 
    location / {
    
     
        root  /var/www/nginx;           #设置服务器默认网站的根目录位置,需要手动创建
        index  index.html index.htm;    #设置默认打开的文档 
        } 
    error_page  500 502 503 504  /50x.html; #设置错误信息返回页面 
    location = /50x.html {
    
     
        root  html;        #这里的绝对位置是/usr/local/nginx/html
    } 
  } 
}

七、nginx.conf的组成

nginx.conf一共由三部分组成,分别为:全局块、events块、http块。在http块中又包含http全局块、多个server块。每个server块中又包含server全局块以及多个location块。在统一配置块中嵌套的配置快,各个之间不存在次序关系。

1 检测nginx配置文件是否正确

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
[root@localhost ~]# mkdir -p /tmp/nginx

2 启动nginx服务

[root@localhost ~]# /usr/local/nginx/sbin/nginx

查询端口 搭配 grep 使用

ss -nta  

八、Nginx 客户端限速

把需要下载的文件移动到 nginx html目录下

[root@localhost ~]# mv dongman.mp3 /usr/local/nginx/html/

使用 limit_rate 限制客户端传输数据的速度

[root@localhost ~]# vim /etc/nginx/nginx.conf
location / {
    
    
            root   /var/www/nginx/;
            index  index.html index.htm;
            limit_rate  2k;  #对每个连接的限速为2k/s
        }

查询写的数据有没有报错[编译安装]

/usr/local/nginx/sbin/nginx -t

重新加载配置文件[编译安装]

/usr/local/nginx/sbin/nginx -s reload

下载文件 测试速度

wget http://127.0.0.1/dongman.mp3

九、环境变量 [拓扑]

[root@localhost ~]# echo echo $PATH
echo /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# cp /usr/local/nginx/sbin/nginx /usr/bin/

就可以直接使用 nginx 命令了

猜你喜欢

转载自blog.csdn.net/Houaki/article/details/111304459