Nginx,不用多说啦,大家都熟悉的不能再熟悉了,它是一款轻量级的高性能Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,最近在本地研究将nginx和resin配合使用,使服务性能达到最高,在配置过程中主要涉及到单域名配置代理服务,以及配置多域名代理服务,以及最简单实现跨域配置(当然什么负载均衡,动静分离,静态资源代理这些就不说啦,直接放到代码里去了,有注释)。

在正式上线前,先在本地window环境下配置跑起来测试下配置是否正确,所以这次就以windows 版的nginx做测试了,正式上线后,配置也就相差无几了。

一、nginx下载、安装及启动 
下载地址:nginx 
下载最新版的nginx for windows版本,下载完成后,解压做zip包到本地磁盘上,例如:D:\hwy\nginx-1.8.0 
启动:

1、D:\hwy\nginx-1.8.0\start nginx(推荐)
2、D:\hwy\nginx-1.8.0\nginx.exe
  • 1
  • 2

注意:推荐使用第一种方式启动,因为第二种方式会使你的cmd窗口一直处于运行状态,没法输入其他命令了,而第一种已后台的方式运行,可以继续输入其他命令。 
停止:

D:\hwy\nginx-1.8.0\nginx -s stop
  • 1

重启:

D:\hwy\nginx-1.8.0\nginx -s reload
  • 1

二、配置单个server代理服务 
为了模拟域名的形式访问本地服务,我们修改windows的host文件,新增

127.0.0.1 a.test.com
127.0.0.1 b.test.com #(待会配置多域名时使用)
  • 1
  • 2

在D:\hwy\nginx-1.8.0\conf目录新增一个nginx-resin-a.conf,基本配置代码如下:

server{
listen 80;
server_name a.test.com;
index index.html index.htm;
root D:/hwy/aTest/src/main/webapp/;
#配置首页精确匹配
location = / {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://aTestServer;
}
#配置首页
location / {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://aTestServer;
}
#动态页面交给http://127.0.0.1:8080,也即我们之前在nginx.conf定义的upstream aTestServer 均衡
location ~ .*\.(php|jsp|cgi)?$ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://aTestServer;
}
#配置静态资源前缀匹配
location ~ ^/(fileUpload|doc)/ {
root D:/hwy/www/aTest/;
access_log off;
expires 4d;
}
#配置Nginx动静分离,定义的静态页面直接从项目指定目录读取。
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
access_log off;
expires 30d;
} #定义Nginx输出日志的路径
access_log D:/hwy/logs/aTest/access.log main;
error_log D:/hwy/logs/aTest/error.log crit;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

将nginx-resin-a.conf引入到nginx.conf文件里面,nginx.conf如下:

#user  nobody;
#工作的子进程数量(通常等于CPU数量或者2倍于CPU)
worker_processes 4; #错误日志存放路径
#error_log logs/error.log;
#error_log logs/error.log notice;
error_log logs/error.log info; #指定pid存放文件
pid logs/nginx.pid; worker_rlimit_nofile 51200; events {
#使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue,window下不指定。
#use epoll;
#允许最大连接数
worker_connections 51200;
} 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 D:/hwy/nginx-1.8.0/logs/access.log main; client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m; client_header_buffer_size 1k;
large_client_header_buffers 4 4k; sendfile on;
tcp_nopush on;
tcp_nodelay on; #keepalive_timeout 0;
keepalive_timeout 120; upstream aTestServer {
server 127.0.0.1:8080;
} include nginx-resin-a.conf;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

好了,经过上边的配置之后,我们启动nginx以及本地你的aTest服务resin,访问下http://a.test.com看看效果吧!

三、配置多域名 
上边配置了一个aTest的服务的代理,如果我们在服务器上边要运行多个服务,比如bTest服务,达到的效果是,通过http://a.test.com访问aTest站点服务,通过http://b.test.com访问bTest站点服务,其实也很简单的,只需要在引入一个bTest的server配置即可。 
在D:\hwy\nginx-1.8.0\conf目录新增一个nginx-resin-b.conf,基本配置代码如下:

server{
listen 80;
server_name b.test.com;
index index.html index.htm;
root D:/hwy/bTest/src/main/webapp/;
#配置首页精确匹配
location = / {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://bTestServer;
}
#配置首页
location / {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://bTestServer;
}
#动态页面交给http://127.0.0.1:8090,也即我们之前在nginx.conf定义的upstream bTestServer 均衡
location ~ .*\.(php|jsp|cgi)?$ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://bTestServer;
}
#配置静态资源前缀匹配
location ~ ^/(fileUpload|doc)/ {
root D:/hwy/www/bTest/;
access_log off;
expires 4d;
}
#配置Nginx动静分离,定义的静态页面直接从项目指定目录读取。
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
access_log off;
expires 30d;
} #定义Nginx输出日志的路径
access_log D:/hwy/logs/bTest/access.log main;
error_log D:/hwy/logs/bTest/error.log crit;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

然后我们只需要将nginx-resin-b.conf引入到nginx.conf配置文件中即可,在nginx.conf的http最后边增加

    upstream bTestServer {
server 127.0.0.1:8090;
} include nginx-resin-b.conf;
  • 1
  • 2
  • 3
  • 4
  • 5

好了,现在重启nginx,并启动本地你的bTest服务resin,分别访问下http://a.test.comhttp://b.test.com看看是不是都到达指定的站点服务上去啦!

四、跨域配置 
好了,现在我们有了两个不同域名指定的项目了,但是现在bTest服务中有些接口数据请求需要由aTest来提供,bTest通过ajax请求aTest的接口数据,这个时候,如果直接请求,肯定是会涉及到跨域的问题了,浏览器是不允许的。现在我们可以通过nginx反向代理来实现跨域请求。

实例一: 
在nginx-resin-b.conf配置中增加如下:

    location /api {
rewrite ^.+api/?(.*)$ /api/$1 break;
proxy_pass http://aTestServer;
}
  • 1
  • 2
  • 3
  • 4

注意:这里意思是将所有http://b.test.com/api/xxx类似的请求直接rewrite到http://a.test.com/api/xxx上边去啦!

实例二: 
在nginx-resin-b.conf配置中增加如下:

    location /baidu {
rewrite ^.+baidu/?(.*)$ /$1 break;
proxy_pass http://www.baidu.com;
}
  • 1
  • 2
  • 3
  • 4

注意:这里我们就把baidu网站整个搬到我们的127.0.0.1:8080/baidu/目录下了,这样我们访问的时候,直接通过/baidu/xxx来请求百度的数据啦!

简而言之,nginx 是通过把本地一个url前缀映射到要跨域访问的web服务器上,就可以实现跨域访问。

对于浏览器来说,访问的就是同源服务器上的一个url。而nginx通过检测url前缀,把http请求转发到后面真实的物理服务器,并通过rewrite命令重新指向真实的请求地址。这样真实的服务器就可以正确处理请求,并且并不知道这个请求是来自代理服务器的。

简单说,nginx服务器欺骗了浏览器,让它认为这是同源调用,从而解决了浏览器的跨域问题。又通过重写url,欺骗了真实的服务器,让它以为这个http请求是直接来自与用户浏览器的。

windows上 nginx 配置代理服务,配置多域名,以及最简单实现跨域配置的更多相关文章

  1. 014.Nginx跨域配置

    一 跨域概述 1.1 同源策略 同源策略是一个安全策略.同源,指的是协议,域名,端口相同.浏览器处于安全方面的考虑,只允许本域名下的接口交互,不同源的客户端脚本,在没有明确授权的情况下,不能读写对方的 ...

  2. 跨域原因及SpringBoot、Nginx跨域配置

    目录 概述 简单请求 跨域解决方案 概述 SpringBoot跨域配置 Nginx跨域配置 概述 MDN文档 Cross-Origin Resource Sharing (CORS) 跨域的英文是Cr ...

  3. nginx-springboot-vue前后端分离跨域配置

    nginx-springboot-vue前后端分离跨域配置 引言 接着上篇--简单的springboot-vue前后端分离登录Session拦截的demo,其中跨域是通过springboot后端全局设 ...

  4. 常见跨域解决方案以及Ocelot 跨域配置

    常见跨域解决方案以及Ocelot 跨域配置 Intro 我们在使用前后端分离的模式进行开发的时候,如果前端项目和api项目不是一个域名下往往会有跨域问题.今天来介绍一下我们在Ocelot网关配置的跨域 ...

  5. Django+Vue跨域配置与经验

    一.原理 同源?同源策略? 同源的定义是:两个页面的协议.端口和域名都相同 同源的例子: 不同源的例子: 同源策略SOP(Same origin policy)是一种浏览器约定,它是浏览器最核心也最基 ...

  6. Asp.net跨域配置

    <system.webServer> <httpProtocol> <customHeaders> <add name="Access-Contro ...

  7. asp.net (webapi) core 2.1 跨域配置

    原文:asp.net (webapi) core 2.1 跨域配置 官方文档 ➡️ https://docs.microsoft.com/zh-cn/aspnet/core/security/cors ...

  8. .net core api服务端跨域配置

    第1步:添加包引用(.net core 2.2 已自带此包,可跳过此步骤) Install-Package Microsoft.AspNetCore.Cors 第2步:在Startup.cs文件的Co ...

  9. asp.net core api 跨域配置

    项目前后端分离,前端请求接口例如使用axios发送请求时浏览器会提示跨域错误,需要后端配置允许接口跨域 配置步骤: 1.通过NuGet安装Microsoft.AspNetCore.Cors.dll类库 ...

随机推荐

  1. 推荐收藏 —— MySQL视图详细介绍

    前言:  在MySQL中,视图可能是我们最常用的数据库对象之一了.那么你知道视图和表的区别吗?你知道创建及使用视图要注意哪些点吗?可能很多人对视图只是一知半解,想详细了解视图的同学看过来哟,本篇文章会 ...

  2. Shell 编程 免交互 expect

    本篇主要写一些shell脚本免交互expect的使用. 概述 Expect是建立在tcl基础上的一个工具,Expect 是用来进行自动化控制和测试的工具.主要解决shell脚本中不可交互的问题. 安装 ...

  3. RHCE试题解析

    环境准备 yum-config-manager --add-repo=ADDREPO vim /etc/yum.conf gpgcheck=0(1=on,0=off)   增加指定repo源,关闭签名 ...

  4. ABP 依赖报错

    一般是自己写的Service 没有实现IApplicationService,和没有继承ApplicationService

  5. contest3 CF994 div2 ooxxx? oooox? ooooo?

    题意 div2 C (x)(o) 在一个平面上, 给一个水平的正方形和一个\(45^.斜\)的正方形 求是否相交(共点也算), 坐标正负\(100\)以内 div2 D (x)(o) \(A,B\)两 ...

  6. vue之父子组件通信

    一. 父-子组件间通信 let children={    template:`<div><h1>{{send}}</h1></div>`,  # 将传 ...

  7. priority_queue(优先队列)使用方法

    priority_queue默认是一个大根堆: 并且出队方式与普通队列queue的front不一样,是top . 如果想用小根堆,可以修改定义时的参数: priority_queue<int,v ...

  8. ZROI 暑期高端峰会 A班 Day3 图论

    最短路 NOI2019 D2T1 弹跳 KD 树 线段树套set -> 线段树套并查集? POI2014/2015 ??? \(n\) 个点 \(m\) 条边 DAG.求删掉每个点后 \(1\) ...

  9. 【图解】给面试官解释TCP的三次握手与四次挥手-Web运用原理及网络基础

    作者 | Jeskson 来源 | 达达前端小酒馆 轻松了解HTTP协议 为什么要学习网络协议呢?为什么要学习计算机完了呢?显然这很重要,至少能够帮助你找到工作的原因之一,学习网络知识点太多太多,没有 ...

  10. 构建一个给爬虫使用的代理IP池

    做网络爬虫时,一般对代理IP的需求量比较大.因为在爬取网站信息的过程中,很多网站做了反爬虫策略,可能会对每个IP做频次控制.这样我们在爬取网站时就需要很多代理IP. 代理IP的获取,可以从以下几个途径 ...