nginx学习总结(不包含安装过程)

server/2024/12/24 7:53:09/
1. nginx常见配置

http服务上支持【若干虚拟主机】。每个虚拟主机对应一个server配置项,配置项里面包含该虚拟主机相关的配置。

server{listen 80 default;server_name www.yonqin.com;index index.html index.htm index.php;root /data/www;location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires      30d;}location ~ .*\.(js|css)?${expires      1h;}
}

  • listen 80; 监听端口,默认80,小于1024的要以root启动。可以为listen :80、listen 127.0.0.1:80等形式。
  • server_name www.yonqin.com 用于设置虚拟主机服务名称,如:127.0.0.1 、 localhost 、域名[www.baidu.comopen in new window | www.jd.comopen in new window],也可以进行正则匹配。
  • root /data/www 定义服务器的默认网站根目录位置。可以是linux的绝对路径(/xxx/xx),也可以是nginx安装目录的相对路径(html)。
  • index index.jsp index.html index.htm :定义路径下默认访问的文件名,一般跟着root放。
1.1 location 常见的配置项:

location通常用来匹配uri,其基本语法如下:

location [=|~|~*|^~] /uri/ {}

(1)=表示匹配uri时必须做到完全匹配,如

location = /index {}

(2)~表示匹配URI时是字母大小写敏感的,可以使用正则表达式。

(3)~*表示匹配URI时是忽略字母大小敏感的,可以使用正则表达式。

(4)^~表示匹配uri时只需满足前缀匹配即可

# 所有 /./img/开头的uri会全部匹配
location ^~ /./img/ {}

(5)uri参数中是可以使用正则表达式的,如匹配以 .gif .jpg和.jpeg结尾的uri,如下:

location ~* \.(gif|jpg|jpeg)$ {}

(6)以下方式可以匹配所有的uri

location / {}

(7)@ 指定一个命名的location,一般用于内部重定义请求:

location @name {…}
1.2文件路径的定义:

(1)以root方式设置资源路径

语法 root path ,默认 root html,可以在http、server、location模块中配置。

location ^~ /backend {root /data/www/backend
}

如果url为 /backend/index/test.html则会返回/data/www/backend/backend/index/test.html这个文件。

(2)以alias方式设置资源路径

alias也是用来设置文件资源的,它和root不同点在于如何解读紧跟location后面的uri参数,可以在location中配置:

location ^~ /backend {alias /data/www/backend
}

如果url为 /backend/index/test.html则会返回/data/www/backend/index/test.html文件。

alias会将location后的url部分丢弃掉,而root不会。

nginx做静态服务器" style="background-color:transparent;">1.3 nginx做静态服务器

我们都知道,nginx的安装目录中有这样一个html的文件夹,这里只做一个基本的演示,进入后进行简单的修改即可, 修改index.html文件看 可以生效。

我们再结合nginx的基础配置文件中的以下内容:

server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}
}

进入浏览器即可看到效果

2.反向代理解决跨域

在实现代理的过程中,我们需要将/api这个前缀删除掉,有以下两种方法,一种是重写url,如下:

location ^~ /api/ {rewrite ^/api(.*)$ $1 break;proxy_pass http://127.0.0.1:8080;
}

更简单的做法是,在代理地址的后边加/,这样做也会去掉前缀,但不如以上方式灵活:

location ^~ /api/ {proxy_pass http://127.0.0.1:8080/;
}

3. nginx为后端工程做负载均衡

3.1 upstream模块解读

nginx负载均衡功能依赖于 ngx_http_upstream_module模块。upstream 模块应该放于http{}标签内。

模块写法如下: 

upstream backend {ip_hash; server backend1.example.com;server backend2.example.com:8080;server 127.0.0.1:8080;server backup2.example.com:8080;
}

然后在location处使用如下写法:

location / {proxy_pass http://backend;
}

以上写法的意思就是,将来同一个url访问我们的服务时,服务可以由backend中的服务器按照某种特定规则轮流提供

3.2 ngixn负载均衡的五种算法

(1)round robin 轮询 (默认) 按时间顺序依次将请求分配到各个后台服务器中,挂掉的服务器自动从列表中剔除

upstream bakend {  server 192.168.0.1 down;    server 192.168.0.2;  
}

(2)weight 轮询权重 weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下,或在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。

upstream bakend {  server 192.168.0.1 weight=20;  server 192.168.0.2 weight=10;  
}

(3)ip_hash:每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题

upstream bakend {  ip_hash;  server 192.168.0.1:88;  server 192.168.0.2:80;  
} 

(4)url_hash:按访问的URL的哈希结果来分配请求,使每个URL定向到同一台后端服务器,可以进一步提高后端服务器缓存的效率 ,Nginx本身不支持url_hash,需要安装Nginx的hash软件包。

upstream backend {  server 192.168.0.1:88;     //使用hash语句时,不能在使用weight等其他参数server 192.168.0.2:80;  hash $request_uri;  hash_method crc32;    //使用hash算法
}

(5)fair算法:可以根据页面大小和加载时间长短智能地进行负载均衡,根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身不支持fair,要安装upstream_fair模块才能使用。

upstream backend {  server 192.168.0.1:88;  server 192.168.0.2:80;  fair;  
}
简单的负载均衡的实践:

1. 创建简单的SpringBoot项目 ,写一个controller层的接口 返回当前Java进程的监听端口号

package spring.learn.nginx;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/nginx")
public class TestContoller {@Autowiredprivate Environment env;@RequestMapping("/test")public String test(){ // 打印当前端口return "nginx yonqin port: "+ env.getProperty("server.port");}
}

2. jar上传 并启动

3. 配置nginx.conf 

4.浏览器测试

三次请求访问不同的实例

4. nginx 做资源下载服务器

4.1 访问控制 allow/deny

Nginx 的访问控制模块默认就会安装,而且写法也非常简单,可以分别有多个allow,deny,允许或禁止某个ip或ip段访问,依次满足任何一个规则就停止往下匹配。如:

location /status {stub_status on;access_log off;allow 192.168.10.100;allow 172.29.73.0/24;deny all;
}
4.2、列出目录 autoindex 

打开nginx.conf文件,在location,server 或 http段中加入如下参数 ,通过配置可以做为资源下载站 下。

location ^~ /file {root   /data/www;autoindex on;autoindex_exact_size off;autoindex_localtime on;charset utf-8,gbk;
}
  • autoindex on;运行列出目录内容。另外两个参数最好也加上去。
  • autoindex_exact_size off; 默认为on,显示出文件的确切大小,单位是bytes。改为off后,显示出文件的大概大小,单位是kB或者MB或者GB。
  • autoindex_localtime on; 默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的服务器时间。

4.3 演示  在nginx.conf 中配置
4.4 在浏览其中访问


http://www.ppmy.cn/server/152711.html

相关文章

Ubuntu概述

Ubuntu文件系统结构 Linux中/是一切的根目录 文件系统结构: Ubuntu磁盘管理 Ubuntu文件压缩 Ubuntu用户与用户组 文件权限变更

QT多媒体开发(三):使用QMediaPlayer播放视频

QMediaPlayer 类不仅能播放音频文件,也可以播放各种常见的视频文件,如 MP4 文件和 WMV 文件。QMediaPlayer 能对视频文件进行解码,并在某个界面组件上显示视频帧。 使用 QMediaPlayer 播放视频时,必须用函数 setVideoOutput()设置…

maven-resources-production:ratel-fast: java.lang.IndexOutOfBoundsException

Maven生产环境中遇到java.lang.IndexOutOfBoundsException的问题,尝试了重启电脑、重启IDEA等常规方法无效,最终通过直接重建工程解决了问题。 Rebuild Project 再启动OK

云起无垠荣获第八届“强网杯”高阶技术专项赛优秀奖

近日,第八届 “强网杯” 全国网络安全挑战赛线下赛于郑州高新区的网络安全科技馆赛博厅圆满落幕。云起无垠创始人兼 CEO 沈凯文博士在活动中发表了题为《安全智能体技术实践与内生安全问题思考》的精彩演讲。 沈凯文博士指出,当前数字化时代下网络安全领…

什么是事务

在数据库管理系统中,事务(Transaction)是执行一系列操作的最小工作单元,这些操作要么全部成功,要么全部失败。为了确保数据的一致性和完整性,事务被设计为具备四大特性,即原子性(Ato…

Retrofit源码分析:动态代理获取Api接口实例,解析注解生成request,线程切换

目录 一,Retrofit的基本使用 1.定义api接口 2.创建Retrofit实例 3.获取api接口实例发起请求 二,静态代理和动态代理 1,静态代理 2,动态代理 三,动态代理获取Api接口实例 四,解析接口方法注解&…

解锁 GitBook 的奥秘:从入门到精通之旅

一、GitBook 初印象 在当今数字化时代,知识的传播与分享变得愈发便捷和多样化。GitBook 作为一款强大的文档编辑与电子书制作工具,正逐渐崭露头角,为广大创作者、开发者和知识爱好者提供了一个高效且灵活的平台。它不仅仅是一个简单的文档编写…

拓展AI超级智能后的人类生活场景

一、日常生活领域 (一)家居生活 在AI超级智能拓展之后,家居生活将发生翻天覆地的变化。清晨,当第一缕阳光透过智能窗帘的缝隙照进房间时,智能管家已经根据主人的生物钟和当天的日程安排,轻柔地播放起舒缓的…