我正在尝试做的是准备这台机器来为我的 Web 应用程序提供服务。当我通过 提供服务时,它没有任何问题npm start
。我有一个域,example.com
我在该域上安装了带有 Certbot 的 SSL,并已成功将 http 重新路由到 httpswww.example.com和 example.com。
现在发生的事情是当我去www.example.com或 example.com 工作正常,并且我可以移动到我想要的任何 url 路径,只要它可以从主页上的任何按钮直接访问,但每当我尝试访问单个 url 路径时,比如说 myexample.com/admin/login(它在主页中隐藏)或任何手动输入的 url 路径,Web 服务器都会返回错误 404。当我对 执行相同操作时不会发生这种情况npm start
。
我正在运行一台安装了以下组件的 EC2 机器:
- 操作系统:Ubuntu 20.04 LTS
- Web服务器:Nginx 1.18
- 节点:10.24.1
- 新版本:6.14.12
- SSL 提供商:Let'sEncrypt(Certbot 0.40.0)
我已从 EC2 管理控制台打开以下端口:
- 80/自定义任意位置 (http)
- 443/自定义任意位置 (https)
- 22/自定义我的 IP (ssh)
- 3000/自定义我的IP(npm启动默认端口)
我还为我的计算机分配了一个弹性 IP,假设它是1.1.1.1
。
我的 Nginx 配置文件位于:
/etc/nginx/sites-enabled
并且名为:client-config
我已经将 Nginx 客户端配置设置为如下所示:
server {
server_name 1.1.1.1 example.com www.example.com; # 1.1.1.1 this is an example ip
root /home/ubuntu/app-deploy/build;
index index.html; # react by default generate the file in the build directory
location / {
try_files $uri $uri/ =404;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = www.example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name 1.1.1.1 example.com www.example.com; # 1.1.1.1 this is an example ip
return 404; # managed by Certbot
}
跑步nginx -t
回报:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
由于我是新手,因此任何帮助都将不胜感激。
答案1
告诉try_files $uri $uri/ =404
nginx 在文件系统上查找物理文件。
您需要将请求路由到您的 Node.JS 应用程序。一种方法如下:
location / {
try_files $uri $uri/ @application;
}
location @application {
proxy_pass http://127.0.0.1:3000;
}
此配置告诉 nginx 首先搜索物理文件,如果没有找到文件,则请求将传递给你的 NPM 服务器。