Nginx 配置用于托管 Web 应用程序和静态网站

Nginx 配置用于托管 Web 应用程序和静态网站

现在我正在使用 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_filesnginx 查找 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 的任何信息。

相关内容