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 命令了