javaLuo / react-luo

React Automatically - 保持最新技术 react18 hooks router6 webpack5 babel7 antd4
https://isluo.com/work/pwa/
MIT License
312 stars 71 forks source link

nginx 代理的问题 #12

Closed zhans1993 closed 5 years ago

zhans1993 commented 6 years ago

我现在把工程发布之后,需要使用nginx 做代理,但是怎么配置都无法成功,这是我的location 配置,需要怎么更改呢? 谢谢 upstream dist { server localhost:8888 weight=3; } server { listen 8082; server_name localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

   location /dist {
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Nginx-Proxy true;    
    proxy_set_header Connection "";
        proxy_pass http://dist;
        root   html;
        index  index.html index.htm;
    }
javaLuo commented 6 years ago

访问不到还是什么 你确定index.html文件是放在/dist下的吗 把文件放到服务器上,路由访问到 index.html就行

zhans1993 commented 6 years ago

index.html 和 dist 是同级,不在dist 下面

javaLuo commented 6 years ago

能访问到index.html吗

zhans1993 commented 6 years ago

http://localhost:8082/dist/index.html 是可以访问到index.html 的

没有代理的工程 http://localhost:8888/home 可以访问到页面 代理的nginx http://localhost:8082/dist/home 页面错误 访问的资源是http://localhost:8082/dist/dist/app.d66600.js

javaLuo commented 6 years ago

额,那是什么问题,无法加载JS和CSS吗? 把webpack.production.config.js中的输出配置改成这样: ` output: {

    path: path.resolve(__dirname, 'build/dist'), 

    publicPath: 'dist/',

    filename: '[name].[hash:6].js',

    chunkFilename: '[name].[hash:6].chunk.js',

},

`

zhans1993 commented 6 years ago

是的,无法加载js 和css, 现在的output 就是这样配置的 就是js css 资源 多带一层 dist webpack 配置就是用的你写的那个
主要是想nginx 代理之后 加一层 dist 字段分隔,不直接在端口下走路由 是不是工程需要改呢?

javaLuo commented 6 years ago

等我配个nginx试一下

javaLuo commented 6 years ago

没有问题额,我是这么配的 ` server {

listen 80;

server_name gd.isluo.com;

location / {

proxy_pass http://127.0.0.1:8888;

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

error_page 404 500 502 503 504 /50x.html

location = /50x.html {

root html;

}

} `

我在服务器上试的,用了Tomcat,Nginx代理到Tomcat. 我对Nginx也不是很了解。如果不行,你问下身边的后台程序员,后台程序员一般都知道这个。

zhans1993 commented 6 years ago

我知道这样配,问题是这样配的话一个程序就占用了一个端口,,端口有限 主要是希望 80/项目a 80/项目b 多个项目功用一个端口

javaLuo commented 6 years ago

现在你这个路径访问不到 http://localhost:8082/dist/dist/app.d66600.js 是不是要配个静态文件访问路径什么的

zhans1993 commented 6 years ago

那么多资源总不能一个一个写吧,,而且怎么保证不和别的项目的资源冲突呢,就是这个愁啊

javaLuo commented 6 years ago

就在你这个server{ } 里面再加一个: location ~*/dist/{ root /dist/ } 就写一个,能访问到http://localhost:8082/dist/dist就行了 我不知道这样写对不对,大致是这个意思

zhans1993 commented 6 years ago

还是不行 ,我试试其他办法吧,你们项目不用nginx代理的么,有类似思路么。。谢谢 如果不代理的话,本地工程所有路由也加一层呢

javaLuo commented 6 years ago

用的,但都是后台在处理。 我等会儿去问下后台是怎么弄的

zhans1993 commented 6 years ago

额,如果项目部署在服务器二级目录呢?