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;
}
本文来自博客园,作者:kirin(麒麟),转载请注明原文链接:https://www.cnblogs.com/kirin365/articles/16137230.html