学习日志:最近要求做一个门户,要求一个页面可以选择登陆到不同的工程中,起初想的用接口或者将各个系统的用户表整合实现登陆然后跳转到相应的工程,发现这样很麻烦,需要对各个工程进行改造。后来想如何能解决跨域问题,就可以在一个页面上向各个工程发送请求了,通过查资料找到了nginx能通过反向代理实现跨域问题。
nginx简介:nginx不但可以反向代理,还可以进行负载均衡处理,还能对静态页面经常缓存等功能。nginx主要是linux版本也有windows版本,linux版本支持连接数比windows多很多。
nginx操作:首先下载nginx安装,启动nginx服务(linux:service nginx start,windows:dos到安装更目录 输入nginx即可;启动服务后可以查看进程,1个master,3个worker),其他命令(主要是配置文件reload,可以reload文件不需要重启nginx服务,nginx -s reload)
nginx配置文件:这时windows的目录机构,和linux差不多
最重要的配置文件在conf中的nginx.conf文件(如下),nginx.conf文件一般不用改动。
<pre name="code" class="java">#user nobody;
worker_processes 1; //linux有4个,windows只有一个。
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024; //连接数
}
http {
include mime.types; //这个是导入文件,和C++的引入头文件一样
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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
配置反向代理:在nginx的目录下传进配置文件myweb.conf,然后再nginx.conf中http{}尾部引入该文件即可
http{
...
...
include myweb.conf;
}
myweb.conf配置文件如下:(一个server表示一个虚拟机,location表示一个反向代理的配置,原理是通过server(虚拟机)截获请求,mapping到相应的location,再把请求转给的真实的服务。)
server {
listen 8081; //该虚拟机监听的端口
server_name localhost; //监听的ip
charset utf8;
location /webrm { //localhost:8081/webrm 则请求将转给到该location处理
proxy_pass http://172.16.91.15:8081; //反向代理服务地址
proxy_redirect off;
proxy_set_header Host $host:8081; //最好加上和监听端口,因为真实服务返回地址后就会变成80端口,nginx.conf里默认监听80端口
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1; //如何使用反向代理登陆时,出现WebSockets通信时(ws://),这需要加上下面三个参数
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /materiel {
proxy_pass http://172.16.88.111:8080;
proxy_redirect off;
proxy_set_header Host $host:8081;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /favicon.ico { //这个是logo图片,建议不写入日志,因为这个一般都会404。
log_not_found off;
access_log off;
}
location / { //这个是根目录,这里只引用了一个html,login_infores.html,
index login_infores.html; //这个页面和index.html放在一起。
}
}
通过该配置,成功的将webrm和materiel这两个工程“整合在一起”欺骗了浏览器。localhost:8081/webrm 和 localhost:8081/materiel其实是对应的两个不通项目。
这样就不需要更改任何工程,通过login_infores.html这一个页面就可以显现选择哪个工程就登陆到哪个工程的功能。