现在我正在使用 Nginx 作为反向代理来为我的 Node.js 应用程序提供服务。
/etc/nginx/sites-enabled/default
这是文件中的配置
server {
listen 443;
server_name example.com;
ssl on;
# Use certificate and key provided by Let's Encrypt:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
# Pass requests for / to localhost:8000:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://localhost:8000/;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
}
}
我可以通过输入 example.com 或 example.com:8000 来访问此 Web 应用程序。
我还在此路径中上传了一个静态网站文件/home/ftp/single
。最初,我想使此路径可访问(然后我就可以通过 example.com/home/ftp/single 访问静态网站)
我做不到,我的折衷解决方案是在文件中添加一个服务器块default
:
server {
listen 2222;
root /home/ftp/single;
}
所以现在如果我输入 example.com:2222 我将访问静态文件。
但是我对此并不满意。我希望的情况是,当我访问 example.com/static/ 时,我将像在当前设置下输入 example.com:2222 一样访问静态文件
答案1
如果您有文件/home/ftp/single
并且想要通过 访问它们http://example.com/home/ftp/single
,则需要以下附加location
块:
location /home/ftp/single {
root /;
index index.html;
try_files $uri $uri/ =404;
}
这个命令告诉 nginx,对以 开头的规范化 URI 路径的请求/home/ftp/single
将被处理,以便根文件夹是文件系统根目录,然后告诉try_files
nginx 查找 URI 中指定的文件(虚拟服务器域名后的字符串)。
该index
指令告诉 nginx 当请求指向没有文件名的路径时显示哪个文件。
但是,root
设置指向文件系统根目录的指令并不是一个好主意,因为它可能会将其他系统文件暴露给远程访问者。
我推荐这种方法:
location /single {
root /home/ftp;
index index.html;
try_files $uri $uri/ =404;
}
然后,访问http://example.com/single
将显示该文件/home/ftp/single/index.html
。
答案2
我们需要知道域名才能确定。但是,我猜你正在从 http 转发到 https,并且没有可用的 https 服务器,因为你已将其注释掉。
如果你“curl -ihttp://example.com“您可能会收到回复,告知您“301 重定向至https://example.com“。
如果你不这样做,请更新你的问题以提供更多信息,包括
- curl http 和 https 网站
- 这些 curl 的访问日志(不只是随机日志,请为我们关联它们)
- 这些 curl 的错误日志(不只是随机日志,请为我们关联它们)
当然这可能是 DNS 问题,但您还没有告诉我们有关 DNS 的任何信息。