Nginx-高性能的反向代理服务器
Nginx
Nginx作为一款反向代理服务器,现在大多数网站都有使用,自己在项目中几乎都有用到,自己的网站也使用到了它。
了解Nginx

上面图可以直观的看出Nginx的用处,可以将请求转发至Web服务器和文件服务器,当然还可以转发其他的内容,比如Rest接口,TCP端口等等。
使用Nginx
Nginx安装成功后,大部分内容都是配置在nginx.conf文件中。
负载均衡
如果是在同一台服务器上运行了多个Web服务,需要做负载均衡,首先只需要在nginx.conf中配置 upstream 参数,设置好所有的服务请求路径,为这些服务配置好权重以及其他连接参数。
upstream tuling {
server 127.0.0.1:8050 weight=1 max_fails=1 fail_timeout=20;
server 127.0.0.1:8060 weight=1;
}
这样就可以通过 server 参数来监听指定端口,通过 location 来转发到设置好的负载均衡服务上。
设置HTTPS
Nginx设置HTTPS十分简单,HTTPS端口一般为443端口,我们只需要监听443,配置好HTTPS证书,重启Nginx服务后立刻就会生效。
server {
listen 443;
server_name yanzhenyidai.com;
ssl on;
ssl_certificate /usr/local/nginx/cert/www.yanzhenyidai.com.pem;
ssl_certificate_key /usr/local/nginx/cert/www.yanzhenyidai.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
#proxy_pass http://localhost:4000;
proxy_pass http://localhost:3000;
client_max_body_size 3000m;
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
而对外开放的80端口,通常是使用 rewrite 转发到监听的443端口,这样无论怎么请求都是走的HTTPS。
Nginx监听指定域名
Nginx也可以做到监听指定的域名,通过配置 server_name 来处理。
需要注意到的是,如果配置文件中没有进行server_name的配置,但是有域名解析到了服务器,这个时候Nginx会将该域名转发到配置中的第一个server上。
类似情况也会有恶意解析域名到服务器的事情发生,比如有人知道你的服务器IP,将自己的域名直接解析到你的服务器,这样收割服务器的流量,解决方案比较也同样比较恶心,只需要在第一个server下的localtion中转发到一个静态页面提示就可以了。
server {
listen 80;
server_name *.com;
location / {
index error.html;
}
}
Nginx的location转发配置
这里还要着重说明 location 参数,毕竟Nginx是一款反向代理服务器,看家本事都在location上面。
Location区段匹配示例
location = / {
# 只匹配 / 的查询.
[ configuration A ]
}
location / {
# 匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配。
[ configuration B ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开始的查询并且停止搜索,不检查正则表达式。
[ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何以gif, jpg, or jpeg结尾的文件,但是所有 /images/ 目录的请求将在Configuration C中处
理。
[ configuration D ]
}
各请求的处理如下例:
■/ → configuration A
■/documents/document.html → configuration B
■/images/1.gif → configuration C
■/documents/1.jpg → configuration D
切记如果配置第三种转发一定要带 / 结尾,毕竟是吃过亏的人。
遇到过的问题
如果有服务请求转发超过60s的,需要自己在location下增加 proxy_send_timeout 的时间。
如果是客户端请求到Nginx的响应时间过长,则需要设置http下的 client_body_timeout 的时间。
如果是服务端Nginx返回给客户端响应时间过长,则要设置 send_timeout 的时间。
总结
Nginx开源后淘宝将Nginx进行了优化,项目名称Tengine,总而言之,Nginx真的是一款很棒的服务器,
Nginx-高性能的反向代理服务器的更多相关文章
- nginx 反向代理 proxy_pass 及对比nginx与haproxy反向代理服务器功能、性能的优劣
1.使用 proxy 去请求另一个域名下的资源,如果跨域资源也部署在同一台机器上,我们甚至可以 proxy 到 127.0.0.1,比如: location /api { proxy_pass htt ...
- Nginx -HTTP和反向代理服务器简单配置
from:http://blog.sina.com.cn/s/blog_6b64b6a701011feh.html Nginx官方测试能够支持5万并发连接,实际生产环境中可支持2-4万并发连接数. 在 ...
- Nginx负载均衡反向代理服务器
1.第一步先在IIS中创建多个网站,分别用不同的端口号.这里创建两个网站端口号分别8084.8085,在Nginx配置中会用到.测试两个网站能正常访问. 2.配置Nginx 1)增加负载均衡请求列表 ...
- Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器
前言: 本篇文章主要讲解的是如何在Linux CentOS7操作系统搭建.NET Core运行环境并发布ASP.NET Core应用程序,以及配置Nginx反向代理服务器.因为公司的项目一直都是托管在 ...
- Nginx实战之反向代理WebSocket的配置实例
http://www.jb51.net/article/112183.htm 最近在工作中遇到一个需求,需要使用 nginx 反向代理websocket,经过查找一番资料,目前已经测试通过,所以这篇文 ...
- Nginx介绍与反向代理
Nginx的产生 没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器.基于REST架构风格,以统一资源描述符(Unifor ...
- nginx 详解反向代理负载均衡
什么是反向代理负载均衡 使用代理服务器可以将请求转发给内部的Web服务器,使用这种加速模式显然可以提升静态网页的访问速度.因此也可以考虑使用这种技术,让代理服务器将请求 均匀转发给多台内部Web服务器 ...
- Nginx 一个高性能的HTTP和反向代理服务器
本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解过,欢迎留言交流. Nginx能做什么 ——反向 ...
- 简单聊聊不可或缺的Nginx反向代理服务器--实现负载均衡【上篇】
今天又是新的一周,我养足了精神去对待新一周的工作,但是今天到公司发现还是有一点空闲时间的,所以就想与之前接触过的Nginx再交往得更深一点儿. 什么是Nginx: Nginx是一款高性能的http服务 ...
- ubantu 安装nginx HTTP反向代理服务器
Nginx发音的“engine x”是一个免费的开源高性能HTTP和反向代理服务器,负责处理互联网上一些最大的网站的负载. 本教程将概述在Ubuntu 18.04机器上安装和管理Nginx的步骤. 安 ...
随机推荐
- 开源项目在闲鱼、b 站上被倒卖?这是什么骚操作?
起因 - 又是一封邮件 2020 年 3 月 2 日,收到了一封邮件,对,这次故事的起因又是一封邮件,和上次写个bug被国家信息安全漏洞共享平台抓到了一样. 这是一条评论通知邮件,一开始我以为只是正常 ...
- 解决git推不上去1
在使用 Android Studio 对源代码进行push到码云时可出错,报错如下: error: failed to push some refs to 'https://gitee.com/文件路 ...
- nodeJS中定时任务cron的使用
cron模块可以帮助我们在node中定时执行任务.如果你的定时需求是简单的setInterval()与setTimeout()计时器所无法满足的比较复杂的定时规则,推荐使用cron来配置. 安装cro ...
- Flask-Sockets实时的监控画面
Ajax轮询是通过特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器.这种简单粗暴模式有一个明显的缺点,就是浏览器需要不断的向服务器发出请求,H ...
- Asp.net textbox 控件 的 onTextChange 事件
<asp:TextBox ID="txt_MailType" runat="server" OnTextChanged="exitMailTyp ...
- LeetCode-使数组唯一的最小增量
题目描述: 给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1. 返回使 A 中的每个值都是唯一的最少操作次数. 示例: 输入:[1,2,2] 输出:1 解释:经过一次 mo ...
- Loadrunner 11安装和破解
一.安装环境和文件准备 1.操作系统:Windows Server 2008 R2 Enterprise: 2.loadrunner版本:loadrunner 11: 3.安装浏览器:火狐39.0: ...
- HDU-4252 A Famous City(单调栈)
最后更新于2019.1.23 A Famous City ?戳这里可以前往原题 Problem Description After Mr. B arrived in Warsaw, he was sh ...
- EFCore DbContext 报SqlException: Incorrect syntax near 'OFFSET'.
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSq ...
- Check If It Is a Straight Line
2019-10-21 10:35:33 问题描述: 问题求解: public boolean checkStraightLine(int[][] coordinates) { int n = coor ...