首页 > 系统相关 >Nginx

Nginx

时间:2023-12-16 21:34:02浏览次数:22  
标签:http nginx -- app module Nginx location

Nginx

配置文件

可以使用nginx -V查看配置文件路径。

root@57def6feed6c:/etc/nginx# nginx -V
nginx version: nginx/1.18.0 (Ubuntu)
built with OpenSSL 1.1.1f  31 Mar 2020
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-lUTckl/nginx-1.18.0=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-mail=dynamic --with-mail_ssl_module --add-dynamic-module=/build/nginx-lUTckl/nginx-1.18.0/debian/modules/http-auth-pam --add-dynamic-module=/build/nginx-lUTckl/nginx-1.18.0/debian/modules/http-dav-ext --add-dynamic-module=/build/nginx-lUTckl/nginx-1.18.0/debian/modules/http-echo --add-dynamic-module=/build/nginx-lUTckl/nginx-1.18.0/debian/modules/http-upstream-fair --add-dynamic-module=/build/nginx-lUTckl/nginx-1.18.0/debian/modules/http-subs-filter --add-dynamic-module=/build/nginx-lUTckl/nginx-1.18.0/debian/modules/http-geoip2

--conf-path=/etc/nginx/nginx.conf 配置文件路径,关于nginx的配置文件都在这。

负载均衡和反向代理

可以使用nginx -T查看配置文件。
http中配置负载均衡,使用upstream来配置。

upstream backend{
                ip_hash;  # 负载均衡策略,默认是轮询,也可以使用ip_hash哈希散列模式
                server 127.0.0.1:8000;
                server 127.0.0.1:8080;
        }

然后在server中配置反向代理。

location /app{
        proxy_pass http://backend/;
        }
        location /app/{
        proxy_pass http://backend/;
        }

这里有个坑,如果使用proxy_pass http://backend/app;,那么反向代理后,请求的路径会变成http://127.0.0.1:8080/app,导致无法访问。
在询问了ChatGPT4后,给出的回答是:

在你提供的配置片段中,定义了一个名为 backend 的 upstream 块,这个块中包含了两个后端服务器地址:127.0.0.1:8080 和 127.0.0.1:8000。同时,在 location /app 块中,使用了 proxy_pass 指令将请求代理到了 backend 这个上游服务器组
这段配置的含义是,当有请求到达路径 /app 时,Nginx 将会把这些请求按照定义的负载均衡策略(默认是轮询)转发到两个上游服务器之一。也就是说,一个请求可能会被转发到 127.0.0.1:8080,另一个请求可能会被转发到 127.0.0.1:8000。
然而,你提到的情况,即请求 127.0.0.1/app 时,请求被转发到了 127.0.0.1:8080/app 和 127.0.0.1:8000/app,这是因为 proxy_pass 指令将原始请求的 URI 部分 /app 附加到了上游服务器地址后面。这是 Nginx 的默认行为:当 proxy_pass 指令使用在 location 块中,并且没有使用 URI 重写规则时,Nginx 会把 location 匹配到的部分 URI 传递给上游服务器。
如果你想要请求 127.0.0.1/app 时,上游服务器接收到的是 / 而不是 /app,你需要在 proxy_pass 指令中使用一个斜杠(/)结尾的 URL,如下所示:
location /app/ { proxy_pass http://backend/; }
使用这个配置,当请求 127.0.0.1/app 时,Nginx 会将请求转发到 http://backend 上游,并且会剥离掉 /app/ 部分,所以上游服务器会收到请求路径为 /。注意,这里的 location /app/ 和 proxy_pass http://backend/; 都使用了斜杠(/)结尾,这样 Nginx 就知道需要进行 URI 的重写。
如果你不希望转发任何 URI 路径,你可以在 proxy_pass 指令中指定一个没有路径的 URL,例如:
location /app { proxy_pass http://backend; }
在这种情况下,Nginx 会将请求转发到上游服务器的根路径 /。如果你的上游服务器需要在根路径 / 上接收请求,这可能是你想要的配置。

还有就是/app/和/app的区别,/app/是匹配到/app/后面的路径,而/app是匹配到/app后面的路径。
如果在配置文件写 /app 那么请求/app/,时是无法访问的。
chatGPT给的答案,是location /app{location /app/{的区别。

你遇到的问题可能是由于 Nginx 在处理没有以斜杠(/)结尾的请求时执行了一个隐式的重定向。当你访问 127.0.0.1:8001/app(没有斜杠结尾)时,如果 location 块是以斜杠结尾定义的(如 location /app/),Nginx 会认为这是一个对目录的请求,并尝试将请求重定向到以斜杠结尾的 URI,即 127.0.0.1:8001/app/。
这通常是为了保持 URL 的规范性和避免潜在的相对路径问题。例如,如果你的应用在 /app 路径下返回 HTML,并且其中包含相对路径的资源引用,没有结尾的斜杠可能会导致资源加载错误。
要避免这种隐式重定向,你可以确保 location 块与你的请求 URI 结尾保持一致。如果你希望 /app(没有斜杠结尾)也能正确处理,你可以添加一个没有斜杠结尾的 location 块,如下所示:
server { listen 8001; location /app/ { proxy_pass http://backend/; } location /app { proxy_pass http://backend/; } }
在上面的配置中,两个 location 块都会将请求代理到上游的 backend,但是第一个是针对以斜杠结尾的请求,第二个则是针对没有斜杠结尾的请求。这样,你就可以使用 127.0.0.1:8001/app(没有斜杠结尾)或者 127.0.0.1:8001/app/(有斜杠结尾)来访问你的应用,而不会发生重定向。
确保在你的 Nginx 配置中包含了上述两个 location 块,并且重新加载了 Nginx 的配置(通常使用命令 nginx -s reload),然后再次尝试访问你的应用。

虚拟主机

在 http 模块中新建一个 server,或者在 http 模块使用 include 去包含进来。

server{
        listen 8010; 				//监听端口,也就是访问的端口
        server_name localhost;		//写自己的域名,这里是本地就写本地的
        location /{					//根目录
        root /tmp;					//指向网站根目录
        index index.html;			//指定首页
	}
}

标签:http,nginx,--,app,module,Nginx,location
From: https://www.cnblogs.com/qianyuzz/p/17908405.html

相关文章

  • Nginx健康检查【转】
    Nginx作为一款强大的反向代理服务和负载均衡服务,具有高并发、低消耗、配置简单等特点,而健康检查,则是为了保障nginx能够准确的转发到后端的可用服务。Nginx健康检查分为被动探测与主动探测两种,顾名思义,被动探测指nginx被动的发起探测;而主动探测则是在固定时间(可配置)主动发起探测,更......
  • docker-挂载数据卷实现不重启Nginx容器展示不同的网页内容
    dockerpullnignxdockervolumecreatetest_volumesdockerrun-d-p80:80-hnginx--namenginx--mounttype=bind,source=/var/lib/docker/volumes/test_volumes,destination=/var/nginx/htmlnginx#-hnginx是必须的,不然就要去更改容器里面的Nginx.conf配置项容器......
  • nginx配置指定路径访问白名单
    444状态码说明444是Nginx中特殊的状态码,代表的含义是:Nginx关闭连接而不向客户端发送响应,可以用来抵挡ddos攻击配置#usernobody;#worker_processes1;#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;#pidl......
  • grpc使用nginx代理配置
    参考:https://www.nginx.com/blog/nginx-1-13-10-grpc/重点是标记红色的部分http{log_formatmain'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"'......
  • nginx国密ssl测试
    文章目录文件准备编译部署nginx申请国密数字证书配置证书并测试文件准备下载文件并上传到服务器,这里使用centos7.8本文涉及的程序文件已打包可以直接下载。点击下载下载国密版opensslhttps://www.gmssl.cn/gmssl/index.jsp下载稳定版nginxhttp://nginx.org/en/download.html编......
  • nginx配置多个站点共用80端口,不算端口冲突吗?
    在使用Nginx配置多个站点时,可以将它们共享一个端口(例如80端口)。这是因为Nginx使用虚拟主机(VirtualHost)的概念,通过对访问请求进行区分,将请求发送到不同的站点。Nginx的配置文件中,可以通过server块来定义不同的虚拟主机。每个server块中可以指定不同的域名或IP地址,并设置对应的站点......
  • k8s安装Ingress-Nginx
    目前,DHorse(https://gitee.com/i512team/dhorse)只支持Ingress-nginx的Ingress实现,下面介绍Ingress-nginx的安装过程。下载安装文件首先,需要匹配Ingress-nginx版本和kubernetes版本。在https://github.com/kubernetes/ingress-nginx可以找到,如下图所示:笔者用的k8s版本是v1.21......
  • Nginx
    简介Nginx(”enginex”)是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上Ngfinx的并发能力确实在同类型的网页服务器中表现较好。Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数......
  • Nginx-server-文件下载配置
    server{ listen8001; server_namelocalhost; #错误日志:在location块中添加错误日志记录,以便于问题排查。 error_log/var/log/nginx/8001_down_error.log; #通过valid_referers指令来限制允许访问资源的来源。 valid_referersnoneblockedserver_nameslocalh......
  • 深入了解RPM包管理与Nginx源码包管理
    在Linux系统中,RPM(RedHatPackageManager)是一种流行的软件包管理工具,用于安装、查询和卸载软件包。同时,在编译和安装Nginx等软件时,源码包管理也是一个重要的方面。本文将详细介绍RPM包管理的基本操作以及Nginx源码包管理的方法。RPM包管理1.安装RPM包使用命令可以轻松安装RPM......