Nginx基础使用
Posted 知道什么是码怪吗?
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx基础使用相关的知识,希望对你有一定的参考价值。
目录
nginx.conf主配置文件
首先到达安装目录的 conf 文件夹下
查看配置文件内容
vim nginx.conf
初始的配置文件当中有很多信息是被注释了的
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events
worker_connections 1024;
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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location /
root html;
index index.html index.htm;
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html
root html;
# proxy the php scripts to Apache listening on 127.0.0.1:80
#
#location ~ \\.php$
# proxy_pass http://127.0.0.1;
#
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \\.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
# deny all;
#
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location /
# root html;
# index index.html index.htm;
#
#
# HTTPS server
#
#server
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location /
# root html;
# index index.html index.htm;
#
#
删除掉注释的内容,精简版本如下(不用担心删除了之后以后需要用到怎么办,同一目录下有初始文件备份内容):
注释版本简化配置文件
worker_processes 1; #允许进程数量,建议设置为cpu核心数或者auto自动检测,注意Windows服务器上虽然可以启动多个processes,但是实际只会用其中一个
events
#单个进程最大连接数(最大连接数=连接数*进程数)
#根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。
worker_connections 1024;
http
#文件扩展名与文件类型映射表(是conf目录下的一个文件)
include mime.types;
#默认文件类型,如果mime.types预先定义的类型没匹配上,默认使用二进制流的方式传输
default_type application/octet-stream;
#sendfile指令指定nginx是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度。
sendfile on;
#长连接超时时间,单位是秒
keepalive_timeout 65;
#虚拟主机的配置
server
#监听端口
listen 80;
#域名,可以有多个,用空格隔开
server_name localhost;
#配置根目录以及默认页面
location /
root html;
index index.html index.htm;
#出错页面配置
error_page 500 502 503 504 /50x.html;
#/50x.html文件所在位置
location = /50x.html
root html;
虚拟主机
虚拟主机是为了在同一台物理机器上运行多个不同的网站,提高资源利用率引入的技术。原本一台服务器只能对应一个站点,通过虚拟主机技术可以虚拟化成多个站点同时对外提供服务。
申请域名
这里可以通过修改本地文件 hosts 实现相同效果。只需要在 hosts 文件中加入域名映射即可。但为了方便以后进行外网测试,我选择在阿里云上购买一个域名进行测试,购买过程这里不一一列出,完成购买审核通过之后,我们进行域名解析设置。
hosts 文件路径
C:\\Windows\\System32\\drivers\\etc
测试是否成功
命令行模式看是否 ping 通,因为上面主机记录设置为*,所以不管前缀为什么都能 ping 通。
ping 网站地址
创建服务对应文件
在 Linux 系统当中根目录下创建如下结构的目录。
vod 下 html 内容为:
this is vod web site!
www 下 html 内容为:
this is www web site!
修改nginx.conf配置文件
新添加一个 server,配置 server_name 和 root 。如果按照上面的 Linux 目录进行创建,那么不需要修改 root 路径。
worker_processes 1;
events
worker_connections 1024;
http
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#虚拟主机的配置1
server
#监听端口
listen 80;
#域名,可以有多个,用空格隔开
#--------------修改--------------------
server_name www.网站地址; #填入自己的网站地址。例如www.abc.com
#---------------修改-------------------
#配置根目录以及默认页面
location /
#--------------修改--------------------
root /www/www;
#--------------修改--------------------
index index.html index.htm;
#出错页面配置
error_page 500 502 503 504 /50x.html;
#/50x.html文件所在位置
location = /50x.html
root html;
#虚拟主机的配置2
server
#监听端口
listen 80;
#--------------修改--------------------
server_name v.网站地址; #填入自己的网站地址。例如v.abc.com
#--------------修改--------------------
#配置根目录以及默认页面
location /
#--------------修改--------------------
root /www/vod;
#--------------修改--------------------
index index.html index.htm;
#出错页面配置
error_page 500 502 503 504 /50x.html;
#/50x.html文件所在位置
location = /50x.html
root html;
测试配置是否成功
配置完成之后,记得重启服务 nginx 服务。然后浏览器输入之前配置的 server_name ,查看显示内容。
server_name匹配规则
server_name 匹配分先后顺序,写在配置文件中靠前的 server_name 先进行匹配。
完整匹配
server_name 可以匹配多个域名。
server_name v.abc.com www.abc.com;
通配符匹配
不管是什么前缀,只需要满足后面匹配成功。
server_name *.abc.com
不管是什么后缀,只需要满足前缀匹配成功。
server_name vod.*;
正则匹配
server_name ~^[0-9]+\\.abc\\.com$
反向代理
反向代理方式是指以代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
反向代理服务器通常有两种模型,一种是作为内容服务器的替身,另一种作为内容服务器集群的负载均衡器。
作内容服务器的替身
当外部尝试访问内容服务器时,首先会将其送入代理服务器,然后代理服务器通过特定通路将请求发送到内容服务器,内容服务器再通过该通道将结果回传给代理服务器。相当于代理服务器是内容服务器的替身。如果内容服务器返回错误消息,代理服务器会先行截取该消息并更改标头中列出的任何 URL,然后再将消息发送给客户机。如此可防止外部客户机获取内部内容服务器的重定向 URL。
这样处理之后代理服务器给内容服务器提供了一道屏障,未经授权的用户无法访问到真正的内容服务器,因为防火墙通路只允许代理服务器有权进行访问。
作为内容服务器的负载均衡器
可以在一个组织内使用多个代理服务器来平衡各 Web 服务器间的网络负载。在此模型中,可以利用代理服务器的高速缓存特性,创建一个用于负载平衡的服务器池。此时,代理服务器可以位于防火墙的任意一侧。如果 Web 服务器每天都会接收大量的请求,则可以使用代理服务器分担 Web 服务器的负载并提高网络访问效率。如果不止一个代理服务器,DNS 可以采用“轮询法”选择其 IP 地址,随机地为请求选择路由。客户机每次都使用同一个 URL,但请求所采取的路由每次都可能经过不同的代理服务器。
反向代理测试
外网测试
打开 nginx.conf 配置文件,将 root 和 index 进行注销,然后添加 proxy_pass 进行代理。
proxy_pass http://www.baidu.com;
之后重新启动nginx,通过浏览器输入server_name就将会跳转到代理的网址。
如果没有跳转成功,首先检查配置文件是否写错,重启nginx,然后清空浏览器缓存再次测试。
内网测试
克隆一个 Linux 虚拟机编号为 base2,获取其 ip 地址。
ifconfig
修改第一个虚拟机中 nginx.conf 。
每次只要修改完配置文件,都必须重启才能生效!
修改克隆虚拟机 /www/www 路径下的 index.html 文件内容,添加 base2 用于区别。
浏览器中再次输入网址,跳转到 base2 的 index.html 页面。
负载均衡
轮询
之前我们已经克隆了一个 Linux 虚拟机,这里我们再次克隆一个。总共三台服务器。
克隆完成之后,修改 base1 和 base2 两台服务器的 /www/www 目录和 /www/vod 下的 index.html 文件,都加上各自对应的名称以便区分。
分别获取克隆出来的两台服务器的 IP 地址。
在 base 主机上修改 nginx.conf 配置文件。
upstream 和 server 是同级,upstream 中存放两台服务器的地址的端口号,下面proxy_pass进行代理。编辑完成之后重启nginx服务器。
浏览器输入网址进行访问,发现在两个主机之间轮询。
权重
根据权重分配请求。
重启 nginx 服务然后浏览器输入网址进行测试,发现5次请求有4次访问到了 base1 。
重启 nginx 服务然后浏览器输入网址进行测试,全部请求访问 base2 。
重启 nginx 服务然后浏览器输入网址进行测试,全部请求访问 base2 。如果启用 base1 ,那么将不会访问 base2 。
动静分离
为了提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源,如图片、js、css等文件,可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时,代理服务器就可以直接处理,而不用将请求转发给后端服务器。对于用户请求的动态文件,如servlet、jsp,则转发给Tomcat,Jboss服务器处理,这就是动静分离。即动态文件与静态文件的分离。
动静分离配置
上传文件至 base1 主机的 /www/www 目录下。
imgs当中存放一张图片。
index.html文件代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<img src="../imgs/nginx.jpg" width="200" height="100" border="1" alt="图片没有找到"/>
</body>
</html>
重新启动 base1 主机的 nginx 服务,通过ip地址访问。
成功访问,然后我们删除这张 nginx.jpg 图片再次访问,当然也可以给图片改名。
再次访问提示图片没有找到。这时静态图片资源已经不存在 base1 主机上了。我们将 imgs 图片文件夹上传到 base 主机的 nginx 安装目录下的 html 文件夹下。
然后更新 base 主机的配置文件。
复制 location 包括的代码并修改信息,将 base2 主机设置为备用机。
重启 nginx 服务,浏览器访问网址,图片出现。大功告成,成功完成了一个动静分离的小测试,静态资源放在 nginx 服务机,动态资源通过访问内服务器来获取,相比于原来的都放在内服务器,这样可以提高访问速度。
正则匹配路径
如果我们要匹配的路径越来越多,在配置文件当中配置多个 location 将会显得配置文件十分的臃肿,可以使用正则表达式来简化。
URLRewrite
使用 URLRewrite 来修饰真实的URL。
http://192.168.193.148/index.jsp?pageNum=1
比如说上面的路径可以修饰为:
http://192.168.193.148/1.html
rewrite是实现URL重写的关键指令,根据regex (正则表达式)部分内容, 重定向到replacement,结尾是flag标记。
rewrite <regex> <replacement> [flag];
关键字 正则 替代内容 flag标记
正则:perl兼容正则表达式语句进行规则匹配。
替代内容:将正则匹配的内容替换成replacement。
flag标记:rewrite支持的flag标记。
last | 本条规则匹配完成后,继续向下匹配新的location URI规则 |
break | 本条规则匹配完成即终止,不再匹配后面的任何规则 |
redirect | 返回302临时重定向,浏览器地址会显示跳转后的URL地址 |
permanent | 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址 |
优点:掩藏真实的url以及url中可能暴露的参数,以及隐藏web使用的编程语言,提高安全性便于搜索引擎收录
缺点:降低效率,影响性能。
防盗链
盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。而防盗链就是防止这种行为。
防盗链测试
将 base1 中的照片复原,不设置动静分离。方便我们接下来的测试。
修改 base2 的 nginx.config 配置文件,让 base2 也能访问 base1 的 index.html 文件。
正常情况下,我们通过 base2 的 ip 能够访问 base1 显示出图片。
设置防盗链
在 base1 服务器修改 nginx.conf 配置文件, 添加防盗链。
valid_referers 192.168.193.148; #valid_referers 指令,配置是否允许 referer 头部以及允许哪些 referer 访问,去掉http:// 前缀。
if ($invalid_referer)
return 403; # 返回错误码
重启nginx服务,再次访问发现访问失败。
设置Referer再次访问
可以使用postman添加请求头,也可使用国产软件ApiPost。
添加请求头进行测试,访问成功。
返回自定义页面
在实际应用当中,我们可以自定义返回页面,这样相比于默认的页面可读性更高。
首先在 nginx 安装目录下的 html 文件夹中新增403页面。
页面代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>403</h1>
<p>非法请求</p>
<p>禁止盗图,小别扇</p>
</body>
</html>
然后修改nginx.conf,添加自定义报错页面路径。
重启服务再次访问,提示页面如下。
高可用场景Keepalived的使用
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。
keepalived服务的三个重要功能:
- 管理LVS负载均衡软件
- 实现LVS集群节点的健康检查中
- 作为系统网络服务的高可用性(failover)
安装Keepalived
在 base1 和 base2 两台主机上都要安装Keepalived。
安装指令
yum install -y keepalived
安装成功
修改Keepalived配置文件
配置文件当中只需要下面列出的部分,其余部分删除即可。
base1 主机配置文件如下:
! Configuration File for keepalived
global_defs
router_id BASE_1
vrrp_instance Test_1
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication
auth_type PASS
auth_pass 1111
virtual_ipaddress
192.168.8.200
base2 主机配置文件如下:
! Configuration File for keepalived
global_defs
router_id BASE_2
vrrp_instance Test_1
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication
auth_type PASS
auth_pass 1111
virtual_ipaddress
192.168.8.200
启动 Keepalived 查看 ip 信息
启动 Keepalived
systemctl start keepalived
查看 Keepalived 状态
systemctl status keepalived
查看 ip 信息
ip addr
以上是关于Nginx基础使用的主要内容,如果未能解决你的问题,请参考以下文章