通过nginx配置跨域解决请求被浏览器阻止的问题

配置

  • 进入nginx安装位置
    在这里插入图片描述

  • 进入conf文件夹,修改nginx.conf配置文件

    cd conf
    vim nginx.conf
    
  • 找到 server配置选项

    server {
           
        listen       80;
        server_name  localhost;
    
        #charset koi8-r;
    
        #access_log  logs/host.access.log  main;
    
        location / {
           
            root   html;
            index  index.html index.htm;
        }
        # 其他地方都不重要,看这段代码
        # 匹配所有以/api开头的请求
        location /api {
           
        		# 重写请求路径将/api去掉,例如/api/test改写成/test
                rewrite ^/api/(.*)$ /$1 break;
                # 代理到http://localhost:5000
                proxy_pass http://localhost:5000;
        }
        # 以上代码会使得请求http://localhost:80/api/test
        # 转发到 http://localhost:5000/test
    
        #error_page  404              /404.html;
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
           
            root   html;
        }
             # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
           
        #    proxy_pass   http://127.0.0.1;
        #}
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
           
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
    
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
           
        #    deny  all;
        #}
    }
    
  • 通过命令检查配置是否正确

    # 同样在nginx安装目录运行
    cd sbin
    ./nginx -t -c /usr/local/nginx/conf/nginx.conf # 具体路径看自己的
    

    显示以下结果表示配置没得问题在这里插入图片描述

  • 重新启动nginx 服务

    # 在nginx安装目录的sbin目录下运行
    ./nginx -s reload
    

    如果没有报错,配置就生效了

查看跨域效果

  • 我已经准备好了代码,api.js在5000端口提供一个接口
const express = require('express')
let app = express()

app.get('/test', (req,res)=>{
     
	res.send('this is a test message');	
})
app.listen(5000);
  • index.html 会请求http://localhost:80/api/test
<!DOCTYPE html>
<html>
  <head>
    <title>index.html</title>
		<script type="text/javascript" src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
  </head>
  
  <script>
  
  $(function(){
     
	test()
  })
  function test(){
     
	var url = "/api/test";
		$.ajax({
     
			url: url,
			type:"GET",
			dataType:"json",
	});
  }
  </script>
  <body>
    This is my HTML page. <br>
  </body>
</html>
  • 打开浏览器,访问准备好的页面查看请求结果
    通过nginx配置跨域解决请求被浏览器阻止的问题_第1张图片
    浏览器请求的index.html代码中指定的接口路径,但是被nginx转发到了另外的接口路径

通过nginx配置跨域解决请求被浏览器阻止的问题_第2张图片
可以看到请求成功跨域了

你可能感兴趣的:(前端,nginx,linux,javascript,node.js)