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


相关文章
|
7月前
|
前端开发 Java 应用服务中间件
解决跨域问题的8种方法,含网关、Nginx和SpringBoot~
解决跨域问题的8种方法,含网关、Nginx和SpringBoot~
829 0
解决跨域问题的8种方法,含网关、Nginx和SpringBoot~
|
7月前
|
前端开发 应用服务中间件 Linux
nginx解决springcloud前后端跨域问题,同时配置ssl
nginx解决springcloud前后端跨域问题,同时配置ssl
159 0
|
安全 前端开发 应用服务中间件
Nginx 轻松搞定跨域问题
Nginx 轻松搞定跨域问题
|
2月前
|
缓存 前端开发 应用服务中间件
CORS跨域+Nginx配置、Apache配置
CORS跨域+Nginx配置、Apache配置
259 7
|
4月前
|
缓存 安全 应用服务中间件
Nginx:关于实现跨域代理
Nginx:关于实现跨域代理
806 1
|
5月前
|
存储 缓存 前端开发
(三)Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...想要的这都有!
早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业务增长,就会造成线上频繁宕机的现象发生,最终导致系统瘫痪无法继续处理用户的请求。
180 1
|
5月前
|
JavaScript 应用服务中间件 nginx
【项目部署系列教程】5. nginx配置反向代理,解决跨域接口的访问
【项目部署系列教程】5. nginx配置反向代理,解决跨域接口的访问
269 10
|
7月前
|
JSON JavaScript 前端开发
vue2_vite.config.js的proxy跨域配置和nginx配置代理有啥区别?
vue2_vite.config.js的proxy跨域配置和nginx配置代理有啥区别?
255 1
|
应用服务中间件 nginx
百度搜索:蓝易云 ,Nginx设置禁用 OPTIONS 请求以及允许跨域教程!
通过按照上述步骤,在Nginx中设置禁用OPTIONS请求和允许跨域。请确保在编辑Nginx配置文件时使用正确的服务器名称或IP地址。
114 0
|
7月前
|
前端开发 Java 应用服务中间件
Springboot解决跨域问题方案总结(包括Nginx,Gateway网关等)
Springboot解决跨域问题方案总结(包括Nginx,Gateway网关等)