我的nginx设置需要将所有非/api/请求http://198.xxx.xxx.xx:8080/到http://198.xxx.xxx.xx:8080/ 。 当我访问/ ,一切都很好。 我可以访问我的前端提供的任何路线。 但是,当我刷新,路线没有find。
我意识到我可以将每个路由手动添加到根目录的proxy_pass 。 显然这将是乏味的。 必须有一个错误或更好的方式来configuration我的nginx设置。
这是我的设置:
upstream app_server { server unix:/var/run/unicorn.sock fail_timeout=0; } server { listen 80; server_name xxxxxxxxxxxxxxxx.com; location ~* ^.+\.(jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|mp3|flv|mpeg|avi)$ { try_files $uri @app; } location ^~ /api/ { proxy_set_header X-Forwarded-For $proxy_add_x_forwaded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://app_server/api/; } location /about { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://198.xxx.xxx.xx:8080/; } location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://198.xxx.xxx.xx:8080/; } }
当我访问/about并刷新页面时,它正确加载。 但是对其他路由(不包括root / home)做同样的处理也会出现一个空白页面,并在我的服务器日志中显示为404。 如何将所有非/api/path设置为proxy_pass以http://198.xxx.xxx.xx:8080/ ?
我会尝试一些不同的方法:
upstream app_server { server unix:/var/run/unicorn.sock fail_timeout=0; } server { listen 80; server_name xxxxxxxx.com; location / { try_files $uri $uri/ @app; } location /api/ { proxy_set_header X-Forwarded-For $proxy_add_x_forwaded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://app_server/api; } location @app { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://198.xxx.xxx.xx:8080; } }
因此,我们在这里指定“catch-all”块为@app,它将不匹配任何文件系统文件的请求转发到198.xxx.xxx.xx:8080 。
然后我们有一个单独的location /api/ block,它匹配以URI /api开头的所有请求。 那些被代理到app_server 。