这是一个新手的问题。
我已经在 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
文件系统上。