Nginx入门
1.什么是Nginx
Nginx是一个高性能的Http和反向代理的Web服务器
2.Nginx能做什么
要想了解一个东西,我们必须能了解它的作用,它是做什么的
- 反向代理:正常来说流程是客户端请求服务器,服务器响应客户端,使用反向代理后,则是客户端请求反向代理服务器,反向代理服务器将请求转发到真正的服务器,然后将结果返回。反向代理隐藏了真实的服务器,客户端看不到真实的服务器,只能看到代理服务器
- 正向代理:相信大家应该都用过VPN吧,VPN其实就是正向代理的体现,和反向代理相似,也是客户端请求代理服务器,代理服务器请求真实服务器,只不过与反向代理的区别是正向代理隐藏的是客户端,服务器看不到真实的客服端
- 负载均衡:当我们刚开始开发一个系统的时候,我们往往的流程是这样的,客户端发送请求到服务器,服务器进行响应,这样看着是没问题,可是当后期客户端的并发量比较大时,服务器就面临着崩溃的风险,这个时候最直观的方法就是加服务器,但是我们如何把请求分发到不同的服务器呢?使用负载均衡,分摊服务器的压力。
- 动静分离:一般来说,我们的服务器分为静态资源和动态资源,静态资源是不需要访问数据库等后台的,我们可以将静态资源部署到Nginx上,加快响应速度,减少后台服务器的压力,动态资源则部署到服务器上,客户端请求动态资源时则将请求转发到后台服务器,请求静态资源时则在静态资源目录获取资源。
3.Nginx常用命令
-
nginx -s stop,快速停掉服务
-
nginx -s quit,等待当前工作线程结束后停止
-
nginx -s reload,重新加载配置文件
-
nginx -s reopen,重新打开日志文件
-
nginx -c file 使用替代配置文件而不是默认文件
-
nginx -p prefix 设置nginx路径前缀,即保存服务器文件的目录 默认值为
*/usr/local/nginx*
) -
nginx -t 测试配置文件:nginx 检查配置的语法是否正确,然后尝试打开配置中引用的文件
-
nginx -T 与-t相同,但另外将配置文件转储到标准输出
-
nginx -v 打印nginx 版本
-
nginx -V 打印nginx版本,编译器版本,配置参数
4.Nginx配置文件结构
#全局块
worker_processes 1; #工作进程数
#events块
events {
worker_connections 1024; #每个工作进程支持的最大连接数
}
#http块
http {
#http全局块
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#server块
server {
#server全局块
listen 80; #配置·监听的端口
server_name localhost; #配置监听的地址
#location块
location / { # 用于匹配路径
#网站根目录
root html;
#默认首页文件
index index.html index.htm;
}
# 默认50xd
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
5.location匹配规则
[ = ]:要求路径完全匹配
server {
listen 80;
server_name localhost;
location = /test {
#...
}
}
- http:127.0.0.1/test 匹配
- http:127.0.0.1/TEST 可能会匹配(取决于操作系统的文件系统是否大小写敏感)
- http:127.0.0.1/test?param1=111¶m2=222 匹配
- http:127.0.0.1/test/ 不匹配
- http:127.0.0.1/tset 不匹配
[ ~ ]:区分大小写的正则匹配
server {
listen 80;
server_name localhost;
location ~ ^/test$ {
#...
}
}
-
http:127.0.0.1/test 匹配
-
http:127.0.0.1/TEST 不匹配
-
http:127.0.0.1/test?param1=111¶m2=222 匹配
[ ~* ]:不区分大小写的匹配
server {
listen 80;
server_name localhost;
location ~* ^/test$ {
#...
}
}
- http:127.0.0.1/test 匹配
- http:127.0.0.1/TEST 匹配(取决于操作系统的文件系统是否大小写敏感)
- http:127.0.0.1/test?param1=111¶m2=222 匹配
6.反向代理
配置从nginx转向tomcat的页面
1.首先在tomcat下的webapps目录下创建ls目录并在ls目录下创建a.html
2.配置nginx.conf
server {
listen 8888;
server_name localhost;
location ~ ^/ls/ {
proxy_pass http://localhost:8080;
}
}
7.负载均衡
1.轮询(默认):每个请求按照时间顺序逐一分配到不同的服务器,如果某台服务器宕机,故障系统被自动剔除,使用户访问不受影响
upstream mytest{
server localhost:8080;
server localhost:8081;
}
server {
listen 8888;
server_name localhost;
location ~ ^/ls/ {
proxy_pass http://mytest;
}
}
2.权重(Weight): 指定轮询权值,Weight权值越大,分配到的访问几率越高,主要用于后端服务器性能不均的情况下
upstream mytest{
server localhost:8080 weight=5;
server localhost:8081 weight=1;
}
server {
listen 8888;
server_name localhost;
location ~ ^/ls/ {
proxy_pass http://mytest;
}
}
3.ip_hash:每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题
upstream mytest{
ip_hash;
server localhost:8080;
server localhost:8081;
}
server {
listen 8888;
server_name localhost;
location ~ ^/ls/ {
proxy_pass http://mytest;
}
}
8.动静分离
动静分离主要分为两种,第一种为将静态文件发布在独立的服务器上,第二种为动态和静态文件混合在一起发布,通过Nginx配置来区分
server {
listen 8888;
server_name localhost;
location ~ /data/ { #地址(这里尽量不要用=,否则图片会404)
root image/; # 目录,/加到前面为绝对路径,不加为相对路径
autoindex on; #展示目录下的所有内容
expires 60; #浏览器缓存时间
}
}