我在 vps 内运行 Node js 应用程序。
这是我的 nginx 配置:
server {
listen 80;
server_name xxx.xxx.xxx.xxx;
#access_log logs/ecommerce.access.log main;
location /ecommerce/api/ {
proxy_pass http://127.0.0.1:8000/api/;
}
location /ecapp/ {
proxy_pass http://127.0.0.1:3000/;
}
}
localhost:8000/api
是使用mongodb atlas的后端服务器。我已经通过使用邮递员和发送请求确认了这一点。
localhost:3000
是前端应用程序。
前端应用程序只能通过我的 vps 的公共 IP 运行,如果:
server {
listen 80;
server_name xxx.xxx.xxx.xxx;
#access_log logs/ecommerce.access.log main;
location /ecommerce/api/ {
proxy_pass http://127.0.0.1:8000/api/;
}
location / {
proxy_pass http://127.0.0.1:3000/;
}
}
除了/
喜欢的位置之外的其他位置/ecapp/
都行不通。仅位置/作品。
http://my_vps_ip/
我想通过类似以外的方式访问前端应用程序http://my_vps_ip/ecapp
。
任何帮助表示赞赏。
答案1
我想通了,所以我在这里发布我的解决方案。
客观的
在 http://my_public_vps_addr:port/sub_path 托管 create-react-app 站点。
程序
- 在 .env 文件中: a) 设置 NODE_ENV=product b) 将 PUBLIC_URL 设置为 http://my_public_vps_addr:port/sub_path
- 设置基本名称:
<Router basename=’/sub_path’></Router>
- npm run build a) 这会在 build/ 目录中生成静态文件。
- 将 build/* 内容复制到 /var/www/sub_path/html/sub_path/
- cd 到 /var/www/sub_path/html/ a)
sudo find . -type d -exec chmod 755 {} \;
b)sudo find . -type f -exec chmod 644 {} \;
- touch /etc/nginx/sites-available/sub_path a) ln -s /etc/nginx/sites-available/sub_path /etc/nginx/sites-enabled/sub_path
- /etc/nginx/sites-available/sub_path 的内容
server {
listen port;
listen [::]:port;
root /var/www/sub_path/html;
index index.html index.htm index.nginx-debian.html;
server_name my_public_vps_addr:port;
location /sub_path {
try_files $uri $uri/ /index.html =404
}
}
- 重新启动 nginx 服务: a) sudo systemctl restart nginx.service
- 您的网站应该可以从 http://my_public_vps_addr:port/sub_path 访问
- 就是这样!
答案2
将位置设置为 /ecapp/ 时,当我加载 http://my_vps_ip/ecapp 并检查控制台时,我得到:
GET http://my_public_vps_addr/static/js/bundle.js
GET http://my_public_vps_addr/static/js/0.chunk.js
GET http://my_public_vps_addr/static/js/main.chunk.js
Loading failed for the <script> with source “http://my_vps_public_ip/static/js/bundle.js”.
Loading failed for the <script> with source “http://my_vps_ip_public_ip/static/js/0.chunk.js”. ecapp:30:1
Loading failed for the <script> with source “http://my_vps_ip_public_ip/static/js/main.chunk.js”. ecapp:30:1
为什么要寻找静态文件? /var/www/html/ 下没有静态目录。
电子商务项目的源代码在这里: https://github.com/kaloraat/react-node-ecommerce