默认使用Nginx强制对应用程序服务器发出请求

Noobie问题在这里。

我已经在我的Ubuntu中设置了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; } } 

所以下面的链接工作正常

  • https://example.com/parse/
  • https://example.com/dashboard/
  • https://example.com/test/

但他们正在工作的默认文件的原因有代码工作正常。 例如,我无法为所有parsing的目录做到这一点

  • https://example.com/parse/serverInfo/

正在得到一个404错误。

有没有办法让所有的页面可用,而不必在default文件中configuration它们?

更新

所以当我把它放在我的默认文件

  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/等? 我不能在这里所有的文件夹和我将在服务器内部创build的可能的链接。 因为在这个领域,我还将build立一个网站,将有/assets/等,它将需要每一个。 没有任何代码包含所有可能的链接,它将被创build?

如果你希望大多数请求都转到代理服务器,但是只能从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可以find静态资源。 对于configuration中的root选项, https://example.com/path/to/nginx/content/example.gif需要位于/usr/share/nginx/html/path/to/nginx/content/example.gif在文件系统上。