日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

设置nginx允许服务端跨域

發布時間:2023/12/13 综合教程 19 生活家
生活随笔 收集整理的這篇文章主要介紹了 设置nginx允许服务端跨域 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目前項目大多使用前后端分離的模式進行開發,跨域請求當然就是必不可少了,很多時候我們會使用在客戶端的ajax 請求中設置跨域請求,也有的在服務端設置跨域。但是有時候會遇到不使用ajax也沒有使用后端服務的情況(如:openlayers 加載本地的arcgis 瓦片數據),我們只需要進行一些靜態資源的獲取,于是我們把它交給了nginx 。

一、未配置跨域情況

看下面vue + openlayers 中讀取本地瓦片的配置


     let layers_leshan = new TileLayer({
         source: new XYZ({
             crossOrigin: "anonymous",
             projection: 'EPSG:4326',
             url: '/image_map/_alllayers/',

             tileUrlFunction: function (tileCoord, pixelRatio, proj) {
                 var x = 'C' + padLeft(tileCoord[1], 8, 16);
                 var y = 'R' + padLeft(tileCoord[2] -1, 8, 16);
                 var z = 'L' + padLeft(tileCoord[0], 2, 10);
                 var Newurl = '/image_map/_alllayers/' + z + '/' + y + '/' + x + '.png';
                 return Newurl;
             }
         }),
         zIndex: -3,
         visible: true
     });
     

這里如果使用ajax,層層回調根本獲取不到數據,也許有大佬可以做到(只是我試了沒成功);當初我竟然將數據打包,然后放到nginx中來進行測試(哎),如下面是我的nginx 配置

這是配置的vue 項目build后的dist目錄映射


	# 這個直接指向了我vue項目的dist目錄,用于nginx 加載讓其在同一個服務中來解決跨域問題	
	location /dist/{
		  root /YLKJPro/leshan_integrate_manage;
		}
		

離線瓦片的配置為

	 
		location /image_map/{
            root   html;
        }  	

其中瓦片目錄如下

二、nginx配置了跨域

最后找到了在nginx中配置允許服務端跨域的方法,將nginx中配置改為

		location /image_map/{
			### configuration with allow cross domain ##
			add_header 'Access-Control-Allow-Origin' $http_origin  always;
			add_header 'Access-Control-Allow-Credentials' 'true'  always;
			add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'  always;
			add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'  always;
			add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'  always;
			if ($request_method = 'OPTIONS') {
				add_header 'Access-Control-Max-Age' 1728000  always;
				add_header 'Content-Type' 'text/plain; charset=utf-8'  always;
				add_header 'Content-Length' 0  always;
				return 204;
			}
            root   html;
        }  		

vue 中配置改為


     let layers_leshan = new TileLayer({
         source: new XYZ({
             crossOrigin: "anonymous",
             projection: 'EPSG:4326',
             url: 'http://localhost:808/image_map/_alllayers/',

             tileUrlFunction: function (tileCoord, pixelRatio, proj) {
                 var x = 'C' + padLeft(tileCoord[1], 8, 16);
                 var y = 'R' + padLeft(tileCoord[2] -1, 8, 16);
                 var z = 'L' + padLeft(tileCoord[0], 2, 10);
                 var Newurl = 'http://localhost:808/image_map/_alllayers/' + z + '/' + y + '/' + x + '.png';
                 return Newurl;
             }
         }),
         zIndex: -3,
         visible: true
     });
     

這樣就可以在vue項目中直接訪問到離線瓦片了,解決了由于跨域而需要在每次運行項目測試時,先build ,然后通過nginx對dist 的映射來進行項目測試(這個太過于麻煩)的問題。

總結

以上是生活随笔為你收集整理的设置nginx允许服务端跨域的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。