nginx反向代理到目标服务器,解决跨域问题

日常工作中我们本地开发过程中经常碰到跨域问题,例如:

这个时候我们又不想去麻烦服务端让他们给我们配一个本地域名。那怎么办呢?我们本着求人不如求己的方法理论,直接打开了我们的nginx配置文件: nginx -t上面会显示配置文件所在地址

然后打开配置文件,进行简单的一小段配置,这段代码的作用就是当你访问test.abc.com 的时候,实际上访问的是test.abc.com:8080 也就是你本地启动的服务器(webpack 、vite、selvte等等)

js 复制代码
 server {
        listen       80;
        server_name  test.abc.com;
        location / {
            proxy_pass http://test.abc.com:8080;
        }
        error_page  404              /404.html;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

但是碰到一些接口访问http的时候直接重定向到https,这个时候我们可以本地启动一个https的服务,例如test.abc.com ,因为接口和域名都是https,同源协议中的协议就可以解决了,下面是https的nginx配置

ini 复制代码
```js
 server {
    listen 443 ssl;
    server_name test.abc.com;

    ssl_certificate ./employer.58.com.crt;
    ssl_certificate_key ./employer.58.com.key;

    # 可选:强制HTTPS访问
    # 如果你希望所有的HTTP请求都被重定向到HTTPS,可以添加如下设置
    # 如果不需要,可以注释掉或者删除这部分设置
    # return 301 https://$server_name$request_uri;

    location / {
        proxy_pass https://test.abc.com:8080;
        # 下方直接copy 不需要更改
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        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_set_header X-Forwarded-Proto $scheme;
    }
}
```

以上代码只有这两句代码需要稍微处理下

ssl_certificate ./test.abc.com.crt;

ssl_certificate_key ./test.abc.com.key;

配置的主要是证书的位置,因为我是在nginx配置文件目录里面生成的证书,所以直接用了相对路径引入的,大家可修改为自己证书的位置,名称也可以修改。生成证书的命令

js 复制代码
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout test.abc.com.key -out test.abc.com.crt

问题可以随便写

以上就是nginx做方向代理的解决方案,当然如果单纯的想本地启动一个https的服务,下面是一个webpack-dev-server的配置案例,不借助nginx

js 复制代码
 devServer: {
        // 配置代理
        proxy: {},
        // 设置端口号
        port: 8080,
        // 设置 host
        host: 'test.abc.com',
        // 是否自动打开浏览器
        open: false,
        https: {
            key: fs.readFileSync('/opt/homebrew/etc/nginx/key.pem'),
            cert: fs.readFileSync('/opt/homebrew/etc/nginx/cert.pem'),
            passphrase: '', // 替换为你的证书密码,无密码的可以忽略
        },
    },

还是只有两处需要修改

/opt/homebrew/etc/nginx/key.pem

/opt/homebrew/etc/nginx/cert.pem

密钥生成命令

js 复制代码
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
相关推荐
雾散声声慢13 分钟前
从一个双非本学渣到自学前端上岸,我都做了些什么
前端
艾恩小灰灰24 分钟前
为何Web前端开发仍坚守 HTML 和 CSS,而不全然拥抱纯 JavaScript?
开发语言·前端·javascript·css·html·纯js
吃葡萄不吐葡萄皮嘻嘻39 分钟前
vue实现左右拖动分屏
前端·vue.js
GIS-CL44 分钟前
前端面试题2(vue3)
前端·vue.js
王天平·Jason Wong1 小时前
汉王、绘王签字版调用封装
开发语言·前端·javascript
**之火1 小时前
ArrayBuffer 对象常见的几个用途
前端·javascript
GIS-CL1 小时前
前端面试题6(怎样打包封装自己的插件)
前端
东方佑1 小时前
使用tkinter 制作工作流ui
前端·windows·笔记·python·ui·分类
xiongxinyu101 小时前
让一个元素水平垂直居中的方式
前端·javascript·css·面试
eclipsercp1 小时前
《每天5分钟用Flask搭建一个管理系统》 第10章:前端集成
前端·python·flask