记录在使用nginx中遇到的问题。
在网关中配置工具域名来进行路由转发,测试发现并未生效,原因是nginx转发请求会丢失域名信息,需要在nginx的server块配置文件gulimall.conf中配置中重设请求头域名信息,配置如下。
location / {
proxy_set_header Host $host;
proxy_pass http://gulimall;
}
如果将下列配置放在路由配置的最前面,将会出现一些问题。
路由规则gulimall-index-route
使用Host
谓词匹配所有以.gulimall.com
结尾的请求。
如果这个规则gulimall-index-route
放在最前面,可能出现的问题包括:
重启nginx和网关后,仍然不能正常访问页面,查看nginx日志,发现转发到80端口,而网关是在88端口,说明配置nginx.conf
中upstream
配置缺少端口。
如下图修改之后,即能正常访问。
nginx不能正常工作,查看日志,有如下错误信息。
nginx: [emerg] unexpected "}" in /etc/nginx/conf.d/gulimall.conf:10
这说明在nginx的配置中,某一行的配置可能缺失了分号,nginx配置规范要求每一行配置要以分号结尾。
在使用Nginx作为反向代理服务器时,配置的每一个细节都可能影响到代理的效率和行为。
proxy_pass
后跟URL的结尾在配置Nginx的proxy_pass
指令时,URL的结尾是否包含斜杠/
是一个重要的考量点。这将直接影响到被代理服务器接收到的请求路径。
如果代理路径没有以斜杠结尾,例如设置为/hello
,当Nginx接收到URL请求https://nginx_server_name/hello/world
时,被代理的服务器将会收到完整的请求路径/hello/world
。
相对地,如果代理路径以斜杠结尾,如/hello/
,被代理服务器收到的请求路径将会是/world
。这是因为Nginx会将代理路径后面的部分(/hello/
)从原始请求URL中剥离。
选择哪种方式取决于应用场景。如果希望在同一个域名下通过不同的路径来分配不同的应用程序,推荐使用以斜杠结尾的代理路径。这样,每个应用程序可以独立地处理进入的请求,而无需处理前缀。
Nginx的代理模块默认使用HTTP 1.0版本。然而,在某些情况下,你需要将代理的HTTP版本设置为1.1,以支持更现代的HTTP特性,如持久连接。
要设置Nginx代理使用HTTP 1.1,你可以在配置文件中添加以下指令:
proxy_http_version 1.1;
proxy_set_header Connection "";
这两条指令指示Nginx在代理请求时使用HTTP 1.1协议,并且通过清除Connection
头部来确保与上游服务器的连接可以被适当地管理。
在实操的过程中,路径中少了static导致静态资源不能正常访问,页面不能正常显示。
因篇幅问题不能全部显示,请点此查看更多更全内容