使用 Nginx 默认强制将请求发送到应用服务器

使用 Nginx 默认强制将请求发送到应用服务器

这是一个新手的问​​题。

我已经在 Ubuntu droplet 中设置了 Parse-Server,目前正在处理一个问题。我的 SSL 来自letsencrypt

在此文件中

/etc/nginx/sites-enabled/default

我有以下内容

# HTTP - redirect all requests to HTTPS
server {
    listen 80;
    listen [::]:80 default_server ipv6only=on;
    server_name example.com;
    return 301 https://$host$request_uri;
}

# HTTPS - serve HTML from /usr/share/nginx/html, proxy requests to /parse/
# through to Parse Server
server {
        listen 443;
        server_name example.com;

        root /usr/share/nginx/html;
        index index.html index.htm;

        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 /parse/ to Parse Server instance at localhost:1337
        location /parse/ {
                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:1337/;
                proxy_ssl_session_reuse off;
                proxy_set_header Host $http_host;
                proxy_redirect off;
        }
        location /test/ {
                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:1337/test/;
                proxy_ssl_session_reuse off;
                proxy_set_header Host $http_host;
                proxy_redirect off;
        }
        location /dashboard/ {
                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:4040/dashboard/;
                proxy_ssl_session_reuse off;
                proxy_set_header Host $http_host;
                proxy_redirect off;
        }

        location / {
                try_files $uri $uri/ =404;
        }
}

因此以下链接可以正常工作

但它们可以正常工作,因为默认文件的代码可以正常工作。例如,我无法对所有解析的目录执行此操作

出现 404 错误。

有什么方法可以使所有页面可用,而无需在文件中配置它们default

更新

所以当我把它放入我的默认文件中时

    location /parse/ {
            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:1337/parse/;
            proxy_ssl_session_reuse off;
            proxy_set_header Host $http_host;
            proxy_redirect off;
    }

我没有收到 404 错误。这是因为proxy_pass http://localhost:1337/parse/与我在此处发布的第一个文件不同。

/parse/但是,无论是否等,我如何才能对所有请求执行此操作/something/?我无法在此处列出我将在服务器内创建的所有文件夹和可能的链接。因为在这个域中,我还将设置一个包含等的网站,/assets/并且它将需要每一个。没有任何代码可以包含将要创建的所有可能链接吗?

答案1

如果您希望大多数请求都转到代理,但只直接从 nginx 提供一些内容,则可以使用此结构:

location /path/to/nginx/content {
    try_files $uri $uri/ =404;
}

location /dashboard {
    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:4040/dashboard/;
    proxy_set_header Host $http_host;
    proxy_redirect off;
}

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:1337;
    proxy_set_header Host $http_host;
    proxy_redirect off;
}

因此,我们首先指定默认程序的异常,然后指定默认情况。

/注意,默认情况下该指令没有结尾proxy_pass,表示nginx会把URI附加到发往代理服务器的请求中,也就是https://example.com/some/path代理到http://localhost:1337/some/path

我删除了该proxy_ssl_session_reuse指令,因为当使用 建立与代理的连接时它没有任何意义http

如果使用 建立代理连接https,那么禁用会话重用也是没有用的,因为每次向代理发出请求时都会进行新的 SSL 会话协商,从而降低性能。

然后您需要确保该root指令指定了正确的目录,nginx 可以在其中找到静态资源。对于root配置中的选项,https://example.com/path/to/nginx/content/example.gif需要位于/usr/share/nginx/html/path/to/nginx/content/example.gif文件系统上。

相关内容