nginx处理跨域

简介: 最近从mac转成用window来开发,在安装nginx的时候碰了下钉子,那我就不开心了。想着既然都安装好了,那么就搞点事情吧~

为什么要抛出这个话题?


最近从mac转成用window来开发,在安装nginx的时候碰了下钉子,那我就不开心了。想着既然都安装好了,那么就搞点事情吧~


window上安装nginx


简单讲下在window上安装nginx~


下载软件并安装



基本操作


进入解压的文件夹(nginx.exe)的上一级。


  • 启动:nginx
  • 启动之后就可以在localhost:80访问你的项目了,前提是你的80端口没有被占用


  • 停止
  • 快速停止:nginx -s stop
  • 优雅停止:nginx -s quit


  • 重新加载:nginx -s reload
  • 使用情况-更改配置;开启一个新的工作进程;优雅关闭了旧的工作进程想重新启动


  • 重新打开:nginx -s reopen
  • 重新打开日志文件


注意事项


在出现pid被占用的情况,你可以通过下面的方法处理:


  1. 在任务管理器中手动移除nginx占用的进程


  1. 执行tasklist /fi "imagename eq nginx.exe"找出nginx占用的进程

映像名称                       PID 会话名              会话#       内存使用
========================= ======== ================ =========== ============
nginx.exe                     8248 Console                    1      7,076 K
nginx.exe                     3052 Console                    1      7,508 K


之后kill相关的进程就行了。


注意:有时候移除了占用的PID后还是不行,那重启下电脑~


启动nginx后,在浏览器上输入localhost你会看到其成功启动的页面,如下图:


image.png


跨域问题


对于跨域的概念就不详细说了...


我们先关闭nginx代理,然后开启两个node服务来进行验证,刚开始的时候,我是这样处理的:


<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>nginx</title>
</head>
<body>
    <h1>nginx反向代理</h1>
    <script>
        var xhr = new XMLHttpRequest();
        xhr.open('GET', 'http://localhost:8887');
        xhr.send();
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    console.log(xhr.responseText)
                }
            }
        }
    </script>
</body>
</html>


我开启了第一个服务server.js


const http = require('http');
const fs = require('fs');
http.createServer(function(request, response) {
    const html = fs.readFileSync('index.html', 'utf8');
    response.writeHead(200, {
        'Content-Type': 'text/html'
    });
    response.end(html);
}).listen(8888);
console.log('server is listening at 8888 port');


好,我开启第二个服务来提供数据源server2.js


const http = require('http');
http.createServer(function(request, response) {
    response.writeHead(200, {
        'Content-Type' : 'application/json;charset=utf-8'
    });
    let data = {
        name: 'nginx proxy'
    };
    data = JSON.stringify(data);
    response.end(data);
}).listen(8887);
console.log('server2 is listen at 8887 port');


可是由于浏览器的同源策略,我没能请求到数据~


image.png


我的另外一个开启的服务是有数据的:


image.png


来,nginx派上用场了,我修改下上面html个文件的代码,如下:


<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>nginx</title>
</head>
<body>
    <h1>nginx反向代理</h1>
    <script>
        var xhr = new XMLHttpRequest();
        xhr.open('GET', 'http://localhost/api');
        xhr.send();
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    console.log(xhr.responseText)
                }
            }
        }
    </script>
</body>
</html>


nginx代理


来,我们修改下nginx.conf文件,如下:


http {
    server {
        ...
        location / {
            root   html;
            index  index.html index.htm;
        }
        # 加入的内容
        location /app/ {
            proxy_pass http://localhost:8888/;
        }
        # 加入的内容
        location /api/ {
            proxy_pass http://localhost:8887/;
        }
    }
}


然后开启我们的nginx服务之后,就重启server.jsserver2.js服务。之后在浏览器上打开localhost/app/就在console上看到请求过来的数据了~


image.png


相关文章
|
3月前
|
前端开发 应用服务中间件 Linux
nginx解决springcloud前后端跨域问题,同时配置ssl
nginx解决springcloud前后端跨域问题,同时配置ssl
|
10月前
|
安全 前端开发 应用服务中间件
Nginx 轻松搞定跨域问题
Nginx 轻松搞定跨域问题
|
7月前
|
应用服务中间件 nginx
百度搜索:蓝易云 ,Nginx设置禁用 OPTIONS 请求以及允许跨域教程!
通过按照上述步骤,在Nginx中设置禁用OPTIONS请求和允许跨域。请确保在编辑Nginx配置文件时使用正确的服务器名称或IP地址。
62 0
|
5月前
|
安全 JavaScript 应用服务中间件
Nginx 跨域解决方案
跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器,它允许 Web 应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行。 跨域资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站通过浏览器有权限访问哪些资源。另外,规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是GET以外的 HTTP 请求
|
6月前
|
应用服务中间件 nginx
nginx解决本地跨域问题
nginx解决本地跨域问题
|
9月前
|
JavaScript 前端开发 应用服务中间件
Vue 前端接口跨域,本地 Nginx 代理配置
Vue 前端接口跨域,本地 Nginx 代理配置
320 0
|
10月前
|
缓存 负载均衡 JavaScript
Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...
Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...
233 0
|
11月前
|
负载均衡 前端开发 JavaScript
【Node.js实战】一文带你开发博客项目之联调(导入HTML、Nginx反向代理、CORS解决跨域、与前端联调)
【Node.js实战】一文带你开发博客项目之联调(导入HTML、Nginx反向代理、CORS解决跨域、与前端联调)
170 1
|
12月前
|
缓存 前端开发 NoSQL
Spring Boot2.x-13前后端分离的跨域问题解决方法之Nginx
Spring Boot2.x-13前后端分离的跨域问题解决方法之Nginx
260 0
|
数据采集 缓存 网络协议
Nginx 一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化... ( 二)
Nginx 一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化.. .(二)