千家信息网

如何利用nginx解决cookie跨域访问的问题

发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,本文小编为大家详细介绍"如何利用nginx解决cookie跨域访问的问题",内容详细,步骤清晰,细节处理妥当,希望这篇"如何利用nginx解决cookie跨域访问的问题"文章能帮助大家解决疑惑,下面跟
千家信息网最后更新 2024年11月20日如何利用nginx解决cookie跨域访问的问题

本文小编为大家详细介绍"如何利用nginx解决cookie跨域访问的问题",内容详细,步骤清晰,细节处理妥当,希望这篇"如何利用nginx解决cookie跨域访问的问题"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、写在前面

最近需要把阿里云上的四台服务器的项目迁移到客户提供的新的项目中,原来的四台服务器中用到了一级域名和二级域名。比如aaa.abc.com 和bbb.abc.com 和ccc.abc.com。其中aaa.abc.com登录,通过把cookie中的信息setdomain给.abc.com。其他系统可以共享这个cookie。但是新的四台服务器中并没有申请域名,只有四个ip:

192.168.0.1 单点登录服务器

192.168.0.2

192.168.0.3

192.168.0.4

因为每台服务器有两个项目,都用到单点登录,所以通过修改新的共享登录方式花费时间太多,于是在网上搜cookie的跨域登录,尝试了下,在192.168.0.1 单点登录服务器中多次setdomain分别给2、3、4服务器,结果不理想,因为浏览器不允许。后来无意中看到nginx可以通过欺骗的方式共享cookie。于是想到原来公司部署nginx还有这层用法。

二、原来的nginx配置

先说下nginx的安装,这个网上都有很多教程,不在赘述,我是参照于在linux里安装、启动nginx。需要注意的是./configure后面的各种with,我在配置启动过程遇到了一些问题:

nginx: [emerg] unknown directive "aio" in

加上--with-file-aio

复制代码 代码如下:

starting nginx: nginx: [emerg] the inet6 sockets are not supported on this platform in "[::]:80" of the

在后面加上--with-ipv6好使。

安装完成后。主要是nginx.conf的配置

原来服务器的配置nginx.conf:

# for more information on configuration, see:#  * official english documentation: http://nginx.org/en/docs/#  * official russian documentation: http://nginx.org/ru/docs/user root;worker_processes 2;worker_cpu_affinity 1000 0100;error_log logs/error.log;pid logs/nginx.pid;events {  worker_connections 2048;}http {  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;  gzip on;  gzip_min_length 1000;  gzip_buffers   4 8k;  gzip_types    text/plain application/javascript application/x-javascript text/css application/xml;  client_max_body_size 8m;  client_body_buffer_size 128k;  sendfile      on;  tcp_nopush     on;  tcp_nodelay     on;  keepalive_timeout  65;  types_hash_max_size 2048;  include       mime.types;  default_type    application/octet-stream;  connection_pool_size 512;  aio on;  open_file_cache max=1000 inactive=20s;  # load modular configuration files from the /etc/nginx/conf.d directory.  # see http://nginx.org/en/docs/ngx_core_module.html#include  # for more information.  #  主要配置在这里,nginx.conf配置都是一样  include /usr/local/nginx/conf/conf.d/*.conf;  server {    listen    80 default_server;    listen [::]:80 ipv6only=on default_server;    server_name _;    root     html;    # load configuration files for the default server block.    include /usr/local/nginx/conf/default.d/*.conf;    location / {    }    error_page 404 /404.html;      location = /40x.html {    }    error_page 500 502 503 504 /50x.html;      location = /50x.html {    }  }}

原来服务器的
conf.d/*.conf的配置是reverse-proxy.conf

server{  listen 80;  server_name m.abc.com.cn;  location / {    root  /usr/share/nginx/html/;    index index.html index.htm;  }  location ~ \.(jsp|do)?$ {    proxy_redirect off;    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://localhost:8084;  }  if ($http_user_agent ~* "qihoobot|baiduspider|googlebot|googlebot-mobile|googlebot-image|mediapartners-google|adsbot-google|feedfetcher-google|yahoo! slurp|yahoo! slurp china|youdaobot|sosospider|sogou spider|sogou web spider|msnbot|ia_archiver|tomato bot") {         return 403;     }  access_log /home/logs/nginx/m.abc.com.cn_access.log;} server{  listen 80;  server_name store.abc.com.cn *.store.abc.com.cn;  location / {    proxy_redirect off;    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://localhost:8081;  }  access_log /home/logs/nginx/store.abc.com.cn_access.log;}server{  listen 80;  server_name shopcenter.abc.com.cn;  location / {    proxy_redirect off;    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://10.45.100.222:8082;  }  access_log /home/logs/nginx/shopcenter.abc.com.cn_access.log;} server{  listen 80;  server_name search.abc.com.cn;  location / {    proxy_redirect off;    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://10.45.100.68:8083;  }  access_log /home/logs/nginx/search.abc.com.cn_access.log;}

以上配置后,nginx启动后,通过访问不同的域名来访问不同服务器。而因为都有二级域名.abc.com.cn。所以可以共享cookie。

nginx的文件结构为:

三、修改后的nginx配置

主要是reverse-proxy.conf 不同

server{  listen 9998;  server_name 192.168.0.1:9998;  location /servlets/ {    proxy_redirect off;    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://192.168.0.1:8088;  }  location / {    root  /usr/local/nginx/html/web/;    index index.html index.htm;  }  location ~ \.(jsp|do)?$ {    proxy_redirect off;    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://192.168.0.1:8088;        proxy_http_version 1.1;    proxy_set_header upgrade $http_upgrade;    proxy_set_header connection "upgrade";    proxy_read_timeout  700s;  } if ($http_user_agent ~* "qihoobot|baiduspider|googlebot|googlebot-mobile|googlebot-image|mediapartners-google|adsbot-google|feedfetcher-google|yahoo! slurp|yahoo! slurp china|youdaobot|sosospider|sogou spider|sogou web spider|msnbot|ia_archiver|tomato bot") {         return 403;     }  access_log /usr/local/nginx/logs/www.abc.com.cn_access.log;}server{  listen 9994;  server_name 192.168.0.1:9994;  location / {   proxy_redirect off;    root  /usr/local/nginx/html/weixin/;    index index.html index.htm;  }  location ~ \.(jsp|do)?$ {    proxy_redirect off;    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://localhost:8084;  }  if ($http_user_agent ~* "qihoobot|baiduspider|googlebot|googlebot-mobile|googlebot-image|mediapartners-google|adsbot-google|feedfetcher-google|yahoo! slurp|yahoo! slurp china|youdaobot|sosospider|sogou spider|sogou web spider|msnbot|ia_archiver|tomato bot") {         return 403;     }  access_log /usr/local/nginx/logs/m.abc.com.cn_access.log;} server{  listen 9990;  server_name store.abc.com.cn *.store.abc.com.cn;  location / {    proxy_redirect off;    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://localhost:8081;  }  access_log /usr/local/nginx/logs/store.abc.com.cn_access.log;}server{  listen 9992;  server_name 192.168.0.1:9992;  location / {    proxy_redirect off;    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://192.168.0.2:8082;  }  access_log /usr/local/nginx/logs/shopcenter.abc.com.cn_access.log;} server{  listen 9993;  server_name 192.168.0.1:9993;  location / {    proxy_redirect off;    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://192.168.0.3:8083;  }  access_log /usr/local/nginx/logs/search.abc.com.cn_access.log;}

这样就可以把192.168.0.1:9998 当做单点服务器,登录后的domain都为192.168.0.1 。其他的0.2、0.3都可以通过192.168.0.1nginx和单点服务器的不同端口访问,那么就可以共享这个0.1的域名了。

读到这里,这篇"如何利用nginx解决cookie跨域访问的问题"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

服务器 服务 配置 登录 域名 单点 问题 不同 文章 项目 二级域名 代码 内容 可以通过 方式 妥当 两个 中用 只有 好使 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全应用认证 波兰网络安全教育 壹双软件开发公司 数据库的要素有哪些 判断服务器文件是否存在 广州好商网络技术有限公司 哈尔滨理工大学电子数据库 dell切换服务器 平凉展厅多媒体软件开发公司 南京承真软件开发有限公司 怎么从人民网爬数据库 数据库设计免费时间 云服务器怎么接移动硬盘 泰州工程软件开发 金融软件开发公司排行 网络或服务器异常加载资源失败 合肥蜀山区互联网科技公司有哪些 乌镇互联网医疗科技有限公司 如何从服务器安装电脑系统 崇明区专业型数据库销售品质保障 国家网络安全应急预案 金华物流软件开发工具 数据库服务器 用友 软件开发属不属于计算机网络类 软件开发需要的人员组成 宝山区信息软件开发优势 最新西安市网络安全知识宣传片 明日之后春节模式的服务器在哪 软件开发需要什么计算机语言 高效的数据库备注管理
0