3、Nginx-web服务快速入门

版权声明:原创作品,谢绝转载!否则将追究法律责任。 ————— 作者:kirin

1.nginx基本概述

1.什么是nginx
nginx是一个开源且高性能、高可靠的Http Web服务(解析静态资源)、代理服务(例如代理PHP、代理java)。
开源,可以直接获取nginx的源代码
高性能,支持海量并发
高可靠,服务稳定
2.为什么选择nginx
1.高性能、高并发
通常情况下,单词请求会得到更快的响应。另一方面在高峰期(如有数以万计的并发请求),nginx可以比其他web服务更快的响应请求。

2.高扩展性
Nginx功能模块化。nginx官方提供了非常多的优秀模块提供使用。这些模块都可以实现快速增加和减少。

3.高可靠性
所谓高可靠性,是指Nginx可以在服务器上持续不间断的运行,而很多web服务器往往运行几周或几个月就需要进行一次重启。对于Nginx这样的一个高并发、高性能的反向代理服务器而言,他往往运行网站架构的最前端,那么此时如果我们企业想提供9999.99999的可靠性,对于nginx持续运行能够宕机的时间,一年可能只能以秒来计算,所以在这样的一个角色中,nginx的高可靠性为我们提供了非常好的保证。

4.热部署
热部署是指在不停止服务的情况下升级nginx,这个功能非常重要。对于普通的服务,只需要kill掉进程在启动,但是对于nginx而言,如果nginx有很多的客户端连接,那么kill掉nginx。nginx会向客户端发送tcp reset复位包,但很多客户端无法很好的理解reset包,就会造成异常。由于Nginx的master管理进程与worker工作进程的分离设计,使得nginx能够在不间断服务的前提下,升级Nginx的可执行文件。当然,也支持不停止服务更新配置、更换日志文件等功能。

5.互联网公司都选择Nginx
首先nginx技术成熟,具备企业最常用的功能,如代理、缓存、负载均衡、动静分离、https、lnmp、lnmt等等
其次是哦也能够nginx统一技术栈,降低维护成本,同时降低技术更新成本。

6.nginx使用epool网络模型,而常听到的Apache采用的是select网络模型
select:当用户发起一次请求,select模型就会进行一次遍历扫描,从而导致性能低下。
epoll:当用户发起请求,epoll模型会直接进行处理,效率更高效

2.nginx应用场景

Nginx的主要使用场景我归纳为三个,分为是静态资源服务、代理资源服务、安全服务,场景详细介绍如下

如下图是一个网站的基本架构,首先用户请求先到达nginx,然后在到tomcatphp这样的应用服务器,然后应用服务器在去访问redis、mysql这样的数据库,提供基本的数据功能。

那么这里有一个问题,我们的程序代码要求开发效率高,所以他的运行效率是很低的,或者说它并发是受限,所以我们需要很多应用服务组成一个集群,为更多用户提供访问。
而应用服务一但构成集群,则需要我们的nginx具有反向代理功能,这样可以将动态请求传倒给集群服务。

但很多应用构成集群,那么一定会带来两个需求。   
1、应用服务器需要动态扩展。   
2、有些服务出问题需要做容灾。那么我们的反向代理必须具备负载均衡功能。

其次,随着我们网络链路的增长,用户体验到的时延则会增加。如果我们能把一段时间内不会发生变化的'动态'内容,缓存在Nginx,由Nginx直接向用户提供访可,那么这样用户请求的时延就会减少很多,所以在这里反向代理会演生出另外一个功能"缓存',因为它能加速我们的访问。

在很多时候我们访问docs、pdf、mp4、png等这样的静态资源时,是没有必要将这些请求通过Nginx交给后端的应用服务,我们只需要通过Nginx直接处理'静态资漯'即可。这是Nginx的静态资源功能。

当我们使用http网站时,可能会遭到和篡改,如果使用https安全通讯协议,那么数据在传输过程中是加密的,从而能有效的避免黑客窃取或者篡改数据信息,同时也能避免网站在传输过程中的信息泄露。大大的提升我们网站安全。

3.nginx的组成部分

1.第一个组成部分Nginx二进制可执行文件∶它是Nginx本身框架以及相关模块等构建的一个二进制文件,这个文件就相当于汽车本身,所有的功能都由它提供。
⒉第二个组成部分Nginx.conf文件∶它相当于驾驶人员,虽然二进制可执行文件已经提供了许多的功能,但是这些功能究竟有没有开启,或者开启后定义怎样的行为去处理请求,都是由nginx.conf这个文件决定的,所以他就相当于这个汽车的驾驶员,控制这个汽车的行为。
3.第三个组成部分access.log :它相当于这辆汽车经过所有地方形成的GPS轨迹,access.log会记录Nginx处理过的每一条HTTP的请求信息、响应信息。
4.第四个组成部分error.log :它相当于黑匣子,当出现了一些不可预期的问题时,可以通过error.log将问题定位出来。

Nginx组成部分小结︰

Nginx的组成部分是相辅相成,Nginx二进制可执行文件和Nginx.conf文件,它定义了Nginx处理请求的方式。
而如果我们想对hnginx服务做一些web的运营和运维,需要对access.log做进一步分析。
而如果出现了任何未知的错误,或者预期的行为不一致时,应该通过error.log去定位根本性的问题。

4.nginx快速安装

nginx的安装方式有很多种可以使用源码编译安装(版本随意,安装复杂,升级繁琐)、epel仓库安装(版本较低,安装简单,配置不易读)、官方仓库安装(版本较新,安装简单,配置易读)

1.配置官方仓库

官方仓库配置地址

[root@web01 ~]# cat >> /etc/yum.repos.d/nginx.repo <<EOF
[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
EOF
2.安装nginx服务
[root@web01 ~]# yum install nginx -y
3.启动nginx并加入开机自启动
[root@web01 ~]# systemctl start nginx
[root@web01 ~]# systemctl enable nginx
4.浏览器访问服务器的IP地址

5.nginx的目录结构

1.什么是nginx
[root@web01 ~]# rpm -ql nginx 
/etc/logrotate.d/nginx           ###日志切割文件
/etc/nginx                       ###nginx配置文件目录
/etc/nginx/conf.d                ###存放站点配置文件的目录
/etc/nginx/conf.d/default.conf   ###默认的站点配置文件
/etc/nginx/fastcgi_params        ###fastcgi参数
/etc/nginx/mime.types            ###媒体类型
/etc/nginx/modules         
/etc/nginx/nginx.conf            ###nginx主配置文件
/etc/nginx/scgi_params           ###scgi参数
/etc/nginx/uwsgi_params          ###uwsgi参数
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service       ###启动文件
/usr/lib64/nginx
/usr/lib64/nginx/modules                    ###nginx模块存放路径
/usr/libexec/initscripts/legacy-actions/nginx        ###引导的脚本文件,没用
/usr/libexec/initscripts/legacy-actions/nginx/check-reload###引导的脚本文件,没用
/usr/libexec/initscripts/legacy-actions/nginx/upgrade###引导的脚本文件,没用
/usr/sbin/nginx                     ###nginx的命令
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.20.2          ###nginx帮助文档,不需要,看官网即可
/usr/share/doc/nginx-1.20.2/COPYRIGHT###nginx帮助文档,不需要,看官网即可
/usr/share/man/man8/nginx.8.gz       ###nginx帮助文档,不需要,看官网即可
/usr/share/nginx                   ###nginx默认的页面
/usr/share/nginx/html                ###nginx默认的页面
/usr/share/nginx/html/50x.html       ###nginx默认的页面
/usr/share/nginx/html/index.html       ###nginx默认的页面
/var/cache/nginx                  ###nginx的缓存目录
/var/log/nginx

6.nginx的配置文件

1.主配置文件
[root@web01 ~]# grep -v ^$ /etc/nginx/nginx.conf 
user  nginx;                           ###运行的用户名称
worker_processes  auto;                ###Worker进程数量(用于处理用户请求,数量一般与CPU核心数想等)
error_log  /var/log/nginx/error.log notice;   ###错误日志文件路径,最小级别为notice
pid        /var/run/nginx.pid;                  ###Pid文件路径
events {                                        ###事件模块
    worker_connections  1024;                    ###每个进程的连接数(并发)
}
http {                                          ### http模块
    include       /etc/nginx/mime.types;        ###媒体类型(文件类型),include引用或包含其他位置的配置,精简主配置文件
    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_nopush     on;                                ###
    keepalive_timeout  65;                           ###长链接超时时间
    #gzip  on;                         ###是否开启gzip压缩(静态资源),视频转码与此无关
    include /etc/nginx/conf.d/*.conf;  ###引用的配置文件路径
}
2.http层子配置文件
[root@web01 ~]# grep -v ^$ /etc/nginx/conf.d/default.conf 
server {                             ###server层
    listen       80;                 ###监听的端口
    server_name  localhost;          ###监听的服务名称(域名)
    #access_log  /var/log/nginx/host.access.log  main;  ###访问日志路径
    location / {                                        ###location层
        root   /usr/share/nginx/html;                   ###站点目录
        index  index.html index.htm;                    ###首页文件
    }
    #error_page  404              /404.html;             ###404错误返回的页面
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;             ###500 502 503 504返回的页面
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {                             ###nginx代理
    #    proxy_pass   http://127.0.0.1;               ###代理的后端地址
    #}
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {                             ###nginx代理php的配置文件
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {    ###以ht结尾的全部拒绝访问
    #    deny  all;
    #}
}

7.自定义一个nginx的web站点

1.编写nginx配置文件,定义端口,定义域名,定义返回的路径,以及默认页面
[root@web01 ~]# cat /etc/nginx/conf.d/diy.kirin.com.conf
server {
	listen 80;
	server_name diy.kirin.com;
	location / {
		root /code/diy;
		index index.html;
	}

}
2.创建对应网站的站点目录,并存放对应的代码
[root@web01 ~]# mkdir /code/diy -p
[root@web01 ~]# echo kirin > /code/diy/index.html
3.检查语法,并重新加载服务
[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
[root@web01 ~]# systemctl reload nginx.service
4.配置host劫持,通过域名访问网站

windows的hosts文件路径C:\Windows\System32\drivers\etc\hosts
linux的hosts文件路径/etc/hosts

8.nginx处理请求流程

1.用户输入url域名
2.DNS解析:查找域名对应的ip地址(获得域名对应的ip地址)
3.tcp3次握手:用户通过ip地址与对应的服务器建立连接(与服务器连接)
4.http请求报文:建立tcp连接后,用户向服务器索要指定的内容(页面, 图片,视频….) (向服务索要内容)
5.服务器通过查找 (nginx如何处理请求)
6.http响应报文: 找到后把用户要的内容,返还给用户(服务型响应用户)
7.tcp4次挥手:用户与服务器断开连接

ps:nginx中的http、server、location之间的关系是?
http 标签主要用来解决用户的请求与响应。
server 标签主要用来响应具体的某一个网站。
location 标签主要用于匹配网站具体URL路径。
http{}层下允许有多个Server{},一个Server{}下又有多个location{}

9.nginx的虚拟主机

所谓虚拟主机,在web服务器里是一个独立的网站站点,这个站点对应独立的域名(也可能是IP或端口),具有独立的程序及资源目录,可以独立地对外提供服务供用户访问。

1.基于IP的虚拟主机(不常用)
[root@web01 ~]# cat /etc/nginx/conf.d/ip1.conf 
server {
	listen 10.0.0.7:80;###监听在这个ip的80端口
	location / {
		root /code/ip1;
		index index.html;
	}
}
2.基于多端口的虚拟主机
[root@web01 ~]# cat /etc/nginx/conf.d/duankou1.conf 
server {
	listen 80;##监听在所有ip的80端口
	location / {
		root /code/ip1;
		index index.html;
	}
}
3.基于多域名的虚拟主机
[root@web01 ~]# cat /etc/nginx/conf.d/{www,bbs}.conf
server {
    listen       80;
    server_name  www.old7.com;
    root /soft/code/www;
    ...
}
 
server {
    ...
    listen       80;
    server_name  bbs.old7.com;
    root /soft/code/bbs;
}
posted @ 2022-04-12 20:59  kirin(麒麟)  阅读(191)  评论(0编辑  收藏  举报
Δ