nginx简单使用与配置

nginx简单使用与配置

Nginx 是一个高性能的HTTP和反向代理web服务器、一个邮件代理服务器,一个通用的 TCP/UDP 代理服务器。支持FastCGISSLVirtual HostURL RewriteGzip等功能。并且支持很多第三方的模块扩展。

前端可以通过nginx实现以下功能:

  • 搭建静态资源服务器
  • 反向代理分发后端服务(可以和nodejs搭配实现前后端分离)和跨域问题
  • 多域名配置
  • 根据User Agent选择站点
  • url重写,使用rewrie规则本地映射
  • 获取cookie做分流
  • 资源合并
  • gzip压缩
  • 压缩图片
  • sourceMap调试

下面便介绍一下一些功能的具体实现方式:

本地部署nginx

在官网上下载nginx

请添加图片描述

官网上提供了多个版本的nginx压缩包,选择最新稳定版(其他也可以)下载,解压到任意位置。在演示中安装在D盘,通过命令提示符进入nginx根目录,执行start nginx命令启动服务(访问localhost80如果失败这种情况是80端口被其他应用占用了,此时可以更改conf/nginx.conf文件中的监听端口)。

请添加图片描述

将端口改成8080保存后再次执行start nginx

注意最好不要直接点击根目录下的nginx.exe启动,这样会导致当再次点击时启动多个nginx服务,最好使用命令行运行,这样在关闭的时候执行nginx -s stop即可

搭建静态资源服务器

nginx.conf文件上指定路径对应目录,比如

location /images/ {
	root usr/local/static/;
	autoindex on;
}

autoindex用来开启浏览目录权限,默认为off

nginx的根目录下创建一个usr/local/static/images目录,将图片资源放在该目录下,然后启动nginx服务,通过localhost:8080/images/xxx访问图片。

root的值替换成具体盘里的资源目录也可以实现映射。

location /images/ {
	root D:/pictures/;
	autoindex on;
}

反向代理分发后端服务解决跨域问题

与反向代理相关的配置说明:

  • proxy_pass: 设置要代理的 uri,注意最后的 /。可以是 Unix 域套接字路径或者正则表达式。
  • proxy_redirect off:设置后端服务器Location响应头和Refresh响应头的替换文本
  • proxy_set_header X-Real-IP $remote_addr;: 获取用户的真实 IP 地址
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 后端的Web服务器可以通过 X-Forwarded-For 获取用户真实IP,多个 nginx 反代的情况下,例如 CDN。
  • proxy_set_header Host $host;:允许重新定义或者添加发往后端服务器的请求头。
  • client_max_body_size 10m;:允许客户端请求的最大单文件字节数
  • client_body_buffer_size 128k;:缓冲区代理缓冲用户端请求的最大字节数,
  • proxy_connect_timeout 90;nginx跟后端服务器连接超时时间(代理连接超时)
  • proxy_send_timeout 90;:后端服务器数据回传时间(代理发送超时)
  • proxy_read_timeout 90;: 连接成功后,后端服务器响应时间(代理接收超时)
  • proxy_buffer_size 4k;:设置代理服务器(nginx)保存用户头信息的缓冲区大小
  • proxy_buffers 4 32k;proxy_buffers缓冲区,网页平均在32k以下的设置
  • proxy_busy_buffers_size 64k;:高负荷下缓冲大小(proxy_buffers*2
  • proxy_temp_file_write_size 64k;: 设定缓存文件夹大小,大于这个值,将从upstream服务器获取

不过对于简单的代理只需要配置proxy_pass即可。

比如:

server {
	listen       80;
	server_name  localhost;

	location / {
		proxy_pass  http://test.com:8080
	}
}

上面的配置启动后,访问域名为localhost,会跳转到 http://test.com:8080 路径上。

除此之外还可以根据访问路径跳转到不同服务中:

server {
	listen       80;
	server_name  localhost;

	location ~ /server1 {
		proxy_pass  http://test.com:8080
	}

  location ~ /server2 {
		proxy_pass  http://example.com:8081
	}
}

上面配置会根据路径进行跳转,比如localhost/server1会跳转到http://test.com:8080localhost/server2会跳转到http://example.com:8081

由于浏览器存在跨域问题,当需要访问其他服务上的资源,会报错,因此可以通过反向代理来解决该问题。

多域名配置

由于在域名管理的控制面板设置域名对应ip只能设置到ip,不能详细设置到端口。如果一台服务器部署了多个web应用,使用的不同端口启动的,那么就可以nginx做映射。

比如有两个域名test.comexample.com都想指向同一个服务器,这时test.comexample.com的域名映射都默认对应到端口80的服务。如果访问其他端口就需要在域名后面带上端口号(如test.com:8080

通过nginx配置可以把其他端口都映射到80端口。

server
{
    listen 80;
    server_name test.com;
    location / {
        proxy_pass http://localhost:8880;
    }
}
server
{
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://localhost:8881;
    }
}

这样,当访问test.com的时候就会代理到http://localhost:8880的服务,example.com会代理到http://localhost:8881

根据User Agent选择站点

nginx可实现根据访问源的设备类型进行判断并跳转到不同的服务或其它项目中。

upstream mobileserver {
    server localhost:8080;
}
upstream computerserver {
    server localhost:8081;
}
server {
    listen       80;
    server_name  localhost;
    rewrite_log     on;
    location / {
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr; 
    access_log  /data/logs/nginx/mobile.access.log  main;
    error_log  /data/logs/nginx/mobile.error.log;
    # 设置一个变量来控制代理
    set $client    "";
    
    #如果是IPhone设备、iPad设备、iPod设备、苹果其它非PC设备、苹果PC设备
    if ( $http_user_agent ~* "(iPhone|iPad|iPod|iOS|Android|Mobile|nokia|samsung|htc|blackberry)") {
      set $client "1";
    }        
    if ($client = '1') {
      proxy_pass http://mobileserver;
      break;
    }
    proxy_pass http://computerserver;
}

同时,通过判断user agent,在nginx中禁用一下爬虫,也可以防止一些恶意的访问。

#禁止Scrapy等爬虫工具的抓取
if ($http_user_agent ~* "Scrapy|Sogou web spider|Baiduspider") {
  return 403;
}
#禁止指定UA及UA为空的访问
if ($http_user_agent ~ "FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|LinkpadBot|Ezooms|^$" )
{
  return 403;
}
#禁止非GET|HEAD|POST方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {
  return 403;
}

url重写(重定向)

web 服务中,通常会通过重定向功能,将一个域名的请求转发到另一个域名上。

nginx中可在server中配置,也可以通过location中的rewrite来配置。

在server中配置

server {
    listen 80;
    server_name oldSite.com;
    # 301 指定为临时重定向,也可设置成301 永久重定向
    return 302 http://newSite.com;
}

将域名 oldSite.com 的所有请求,重定向到新网址newSite.com上。

在浏览器的network中可以看到在请求oldSite.com(本文是localhost:8081)时返回的状态码是302,在响应头上还携带上重定向的地址(Location字段),浏览器会根据新地址重新发送请求来获取资源。
在这里插入图片描述
在这里插入图片描述

上面的设置有点问题,就是当访问的域名后边带有资源路径时同样会定位到http://newSite.com,并不会携带路径,需要进行配置。

server {
    listen 80;
    server_name oldSite.com;
    return 302 http://newSite.com$request_uri;
}

除了重定向域名外,还可以指定重定向到 httphttps 协议,也可通过 $scheme 参数继承用户来访时使用的协议类型。

server {
    listen 80;
    server_name oldSite.com;
    return 302 $scheme://newSite.com;
}

也可以使用rewrite关键字

server {
    listen 80;
    server_name oldSite.com;
    rewrite ^ http://newSite.com redirect;
}

301与302状态的区别:

  • 301 永久跳转,当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息中的状态码的一种,表示本网页永久性转移到另一个地址。
  • 302 临时跳转,也是状态码的一种,意义是暂时转向到另外一个网址

在location中配置

rewrite只能在serverlocationif块中使用。

rewrite语法: rewrite regex replacement [flag];

flag有以下几个值:

  • last: 完成重写指令,之后搜索相应的URIlocation
  • break: 完成重写指令
  • redirect: 返回302临时重定向,地址栏会显示跳转后的地址
  • permanent: 返回301永久重定向,地址栏会显示跳转后的地址
 location ~ .* {
	rewrite $(.*) http://newSite.com$1 redirect; 
}

将所有的访问资源重定向到newSite.com中。

gzip压缩

启用gzip压缩功能, 可以使网站的cssjshtml 等静态资源在传输时进行压缩,经过gzip压缩后资源可以变为原来的30%甚至更小,尽管这样会消耗一定的cpu资源,但是会节约大量的出口带宽来提高访问速度。

gzip 的压缩页面需要浏览器和服务器双方都支持,实际上就是服务器端压缩,传到浏览器后解压并解析。浏览器那里不需要我们担心,因为目前的大多数浏览器都支持解析gzip
注意:不建议压缩图片和大文件,图片文件本身就会有压缩,所以就算开启gzip后,压缩前和压缩后大小没有多大区别,所以开启了反而会白白的浪费CPU资源。

#开启gzip
gzip  on;  
#低于1kb的资源不压缩 
gzip_min_length 1k;
#压缩级别1-9,越大压缩率越高,同时消耗cpu资源也越多,建议设置在5左右。 
gzip_comp_level 5; 
#需要压缩哪些响应类型的资源,多个空格隔开。不建议压缩图片.
gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;  
#配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
gzip_disable "MSIE [1-6]\.";  
#是否添加“Vary: Accept-Encoding”响应头
gzip_vary on;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/12443.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DAY 34 正则表达式

正则表达式 REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式, 其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能, 类似于增强版的通配符功能,但…

Linux--tty

Linux 终端(TTY) TTY 是 Teletype 或 Teletypewriter 的缩写,原来是指电传打字机,后来这种设备逐渐键盘和显示器取代。不管是电传打字机还是键盘显示器,都是作为计算机的终端设备存在的,所以 TTY 也泛指计算机的终端(terminal)设…

【面试】你在项目中遇到过慢查询问题吗?你是怎么做SQL优化的?

文章目录 前言一、找出有问题的SQL1、系统层面2、SQL语句层面 二、查看SQL执行计划三、SQL优化案例慢查询优化步骤 SQL优化小结 前言 我在面试的时候很喜欢问候选人这样一个问题:“你在项目中遇到过慢查询问题吗?你是怎么做SQL优化的?” 很多…

基于DSP+FPGA的多轴运动控制平台(一)硬件设计

2 实验平台总体方案与硬件设计 2.1.1 实验平台的功能需求分析 针对便于多轴运动控制技术的研究,培养此方面技术的人才,实验平台应能 对多轴运动实现高速高精度的控制效果,同时保证系统开放性和兼容多种算法及 参数的运行。 实验过程契合…

TCP/IP协议及配置

文章目录 一、TCP/IP概述1. TCP/IP协议族2. 主机与主机之间通信的三个要素 二、什么是IP地址1. 用来标识一个网络节点的互联网地址(如同电话的号码)2. IPv4地址组成 三、IP地址分类1. 常用的IP地址2. 组播及科研专用 四、IP地址分类(续&#…

wait 和 notify

wait 和 notify 7. wait 和 notify7.1 wait()方法7.2 notify()方法★★★wait和notify代码wait 需要搭配 synchronized 7.3 notifyAll()方法7.4 wait 和 sleep 的对比(面试题) 7. wait 和 notify 保证其他线程可以正常进行 由于线程之间是抢占式执行的, …

为什么你这么累,销量还不如那些轻松工作的同行?

管理混乱 忙碌却不见成效 在工业品行业做了10多年的小张,最近向我吐槽:每天忙得团团转,结果销售业绩还不如那些整天轻松工作的同行。几番沟通下来,发现小张每天要做这么多的工作,不忙才怪! 管理员工&#x…

系统安全及应用

目录 一、账号安全控制 1)系统账号清理 2)密码安全控制 chage命令 示例 3)命令历史限制 4)终端自动注销 总结 账号安全 密码安全 二、系统引导和登录控制 1)使用su命令切换用户 用途及用…

生产管理系统是什么?它有哪些功能模块?

阅读本文您将了解:1.企业生产管理的问题;2.生产管理系统模块有哪些;3.如何利用生产管理系统模块解决问题。 一、企业生产管理会遇到哪些问题? 生产管理是有计划、组织、指挥、监督调节的生产活动。以最少的资源损耗,…

风电的Weibull分布及光电的Beta分布组合研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

九龙证券|服务器龙头获资金连续抢筹,尾盘主力抢筹前期大热门股

今天,核算机职业取得主力大手笔抢筹。 今天主力资金净流出53.89亿元,其间创业板净流出3.19亿元,沪深300成份股净流出7.61亿元。 申万一级职业中,今天有19个职业上涨,传媒职业接连两日均涨近5%,居首位&…

OA系统的功能和作用是什么(OA系统百科)

OA系统的功能和作用是什么(OA系统百科)。OA系统是一种非常实用的企业内部管理系统,它可以帮助公司实现各项管理工作,可以说是整个公司和团队的纽带,有助于提高工作效率和管理水平。 具体来说,OA系统的作用…

换电脑 NoteExpress 数据备份迁移

前言 主要操作是跟着这篇博客做的:NoteExpress数据库备份和转移。但也有一些不一样的地方 旧电脑NoteExpress(NE)版本3.7,新电脑版本3.8 旧电脑 导出配置文件 桌面找到图标,打开位置,点击配置备份(绿色的图标&#…

wordpres漏洞扫描器——wpscan

WordPress 使用PHP语言开发的博客平台 WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统(CMS)来使用。 WordPress是一款个人博客系统&#xff0c…

SpringBoot 整合 RabbitMQ (四十一)

二八佳人体似酥,腰间仗剑斩愚夫。虽然不见人头落,暗里教君骨髓枯。 上一章简单介绍了SpringBoot 实现 Web 版本控制 (四十),如果没有看过,请观看上一章 关于消息中间件 RabbitMQ, 可以看老蝴蝶之前的文章: https://blog.csdn.net/yjltx1234csdn/categor…

小红书热词速看 | 古茗有何营销动作?

【导语】 据古茗官方数据,新系列推出当日即售空,单店最高出杯420杯,最快24小时内卖断货;上架3天,销量突破100万杯;10天,就售出了343万杯,其中2款牛油果奶昔用掉了40万斤牛油果&…

【Java基础】迷宫问题的Java代码实现

迷宫问题通常是指在给定的迷宫中,找到从起点到终点的路径的问题。迷宫通常由障碍物和自由空间组成,其中障碍物是不可穿越的区域,自由空间可以穿越。解决迷宫问题的方法有很多种,本文使用递归算法来解决迷宫问题。 一、使用递归算法…

vLive带你走进虚拟直播世界

虚拟直播是什么? 虚拟直播是基于5G实时渲染技术,在绿幕环境下拍摄画面,通过实时抠像、渲染与合成,再推流到直播平台的一种直播技术。尽管这种技术早已被影视工业所采用,但在全民化进程中却是困难重重,面临…

【状态估计】基于增强数值稳定性的无迹卡尔曼滤波多机电力系统动态状态估计(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

TeeChart Pro ActiveX 2023.3.20 Crack

TeeChart Pro ActiveX 图表组件库提供数百种 2D 和 3D 图形样式、56 种数学和统计函数供您选择,以及无限数量的轴和 14 个工具箱组件。图表控件可以有效地用于创建多任务仪表板。 插件的多功能性 ActiveX 图表控件作为服务器端库中的 Web 图表、脚本化 ASP 图表或桌…