nginx默认访问接口(nginx默认地址)

nginx代理常用配置

1. 最简反向代理配置

在http节点下,使用upstream配置服务地址,使用server的location配置代理映射。

upstream my_server {

server 10.0.0.2:8080;

keepalive 2000;

}

server {

listen 80;

server_name 10.0.0.1;

client_max_body_size 1024M;

location /my/ {

proxy_pass ;

proxy_set_header Host $host:$server_port;

}

}

通过该配置,访问nginx地址的请求会被转发到my_server服务地址。

需要注意的是,如果按照如下配置:

upstream my_server {

server 10.0.0.2:8080;

keepalive 2000;

}

server {

listen 80;

server_name 10.0.0.1;

client_max_body_size 1024M;

location /my/ {

proxy_pass ;

proxy_set_header Host $host:$server_port;

}

}

那么,访问nginx地址的请求会被转发到my_server服务地址。这是因为proxy_pass参数中如果不包含url的路径,则会将location的pattern识别的路径作为绝对路径。

2. 重定向报文代理

即便配置了nginx代理,当服务返回重定向报文时(http code为301或302),会将重定向的目标url地址放入http response报文的header的location字段内。用户浏览器收到重定向报文时,会解析出该字段并作跳转。此时新的请求报文将直接发送给服务地址,而非nginx地址。为了能让nginx拦截此类请求,必须修改重定向报文的location信息。

location /my/ {

proxy_pass ;

proxy_set_header Host $host:$server_port;

proxy_redirect / /my/;

}

使用proxy_redirect可以修改重定向报文的location字段,例子中会将所有的根路径下的url代理到nginx的/my/路径下返回给用户。比如服务返回的重定向报文的location原始值为/login,那么经过nginx代理后,用户收到的报文的location字段为/my/login。此时,浏览器将会跳转到nginx的/my/login地址进行访问。

需要注意的是,服务返回的重定向报文的location字段有时会填写绝对路径(包含服务的ip/域名和端口),有时候会填写相对路径,此时需要根据实际情况进行甄别。

location /my/ {

proxy_pass ;

proxy_set_header Host $host:$server_port;

proxy_redirect ;

}

上述配置便是将my_server服务的根路径下的所有路径代理到nginx地址的/my/路径下。当nginx配置只有一个server时,前缀可以省略。

3. 报文数据替换

使用nginx代理最牛(dan)逼(sui)的情况就是http响应报文内写死了服务地址或web绝对路径。写死服务地址的情况比较少见,但也偶尔存在。最棘手的是写死了web绝对路径,尤其是绝对路径都没有公共前缀。举个例子来说:

一般的web页面会包含如下类似路径:

/public:用于静态页面资源,如js脚本/public/js,样式表/public/css,图片/public/img等。

/static:和/public类似。

/api:用于后台服务API接口。

/login:用于登录验证。

其他。

对于这样的服务,可能的代理配置如下:

location /my/ {

proxy_pass ;

proxy_set_header Host $host:$server_port;

proxy_redirect / /my/;

}

location /login/ {

proxy_pass ;

proxy_set_header Host $host:$server_port;

}

location /public/ {

proxy_pass ;

proxy_set_header Host $host:$server_port;

}

location /api/ {

proxy_pass ;

proxy_set_header Host $host:$server_port;

}

由于web页面或静态资源内写死了类似的绝对路径,那么对于用户来说,通过页面内的链接进行跳转时,都会请求到nginx服务对应的路径上。一旦存在另一个服务也包含类似的路径,也需要nginx进行代理,那么矛盾就出现了:访问nginx的同一个路径下的请求究竟转发给哪一个服务?

要解决这个问题,必须在用户收到报文前,将报文的数据中包含的绝对路径都添加统一的前缀,如/my/public,/my/api,/my/login,这样nginx代理配置则可以简化为:

location /my/ {

proxy_pass ;

proxy_set_header Host $host:$server_port;

proxy_redirect / /my/;

}

location /other/ {

proxy_pass ;

proxy_set_header Host $host:$server_port;

proxy_redirect / /other/;

}

nginx的ngx_http_sub_module模块提供了类似的报文数据替换功能,该模块默认不会安装,需要在编译nginx时添加–with-http_sub_module参数,或者直接下载nginx的rpm包。

使用sub_filter对数据包进行替换的语法如下:

location /my/ {

proxy_pass ;

proxy_set_header Host $host:$server_port;

sub_filter \’href=\”/\’ \’href=\”/my/\’;

sub_filter \’src=\”/\’ \’src=\”/my/\’;

sub_filter_types text/html;

sub_filter_once off;

}

上述配置会将/my/下的所有响应报文内容的href=\”/替换为href=\”/my,以及src=\”/替换为src=\”/my,即为所有的绝对路径添加公共前缀。

注意,如果需要配置多个sub_filter,必须保证nginx是1.9.4版本之上的。

nginx负载均衡时访问的端口是哪个端口

负载均衡时使用的端口由nginx.conf配置文件中指定

查看proxy_pass指令中设置的转发参数,如果没有特殊注明端口号,则默认为80端口

nginx 怎么设置跨域调用接口

nginx中设置允许跨域的响应头方法:

添加如下location:

location / {

add_header Access-Control-Allow-Origin *;

}

会在响应头中添加Access-Control-Allow-Origin字段以允许跨域

跟我学Nginx,nginx 如何处理请求?

基于名称(指 HTTP 请求头 Host 字段)的虚拟服务器指通过 HTTP 请求头的 Host 来决定客户端请求由哪个 server 进行处理。

让我们从一个简单的配置开始,下面配置了三个虚拟服务器,它们均侦听 80 端口 :

上面配置中,nginx 仅测试请求的头字段“Host”以确定应将请求路由到哪个 server。如果“Host”的值与任何 server 名称都不匹配,或者请求根本不包含“Host”头字段,则 nginx 会将请求路由到此端口的默认 server。

上面的配置中,默认 server 是第一个 —— 这是 nginx 的标准默认行为。还可以使用 listen 指令中的 default_server 参数明确设置哪个 server 应该是默认 server:

如果不允许处理没有“Host”头字段的客户端请求(反过来说,只处理带有 Host 头字段的客户端请求),可以定义一个只丢弃请求的 server:

在这里,server_name 设置为一个空字符串,它将匹配没有“Host”头字段的请求,并返回一个特殊的 nginx 非标准代码 444 来关闭连接。

让我们看一个更复杂的配置,其中一些虚拟服务器侦听不同的地址:

上面配置中,nginx 首先根据 server 块的 listen 指令测试请求的 IP 地址和端口。然后,它根据与 IP 地址和端口匹配的 server 块的 server_name 条目测试请求的“Host”标头字段。如果未找到服务器名称,则请求将由默认服务器处理。例如,在 192.168.1.1:80 端口上收到的 请求将由 192.168.1.1:80 端口的默认服务器处理,即由第一个服务器处理,因为没有 .com 为此端口定义。

如前所述,默认服务器是监听端口的一个属性,可以为不同的端口定义不同的默认服务器:

现在让我们看看 nginx 如何选择一个位置来处理一个典型的、简单的 PHP 站点的请求:

无论列出的顺序如何,nginx 首先搜索由文字字符串给出的最具体的前缀位置。在上面的配置中,唯一的前缀位置是“/”,并且由于它匹配任何请求,因此将用作最后的手段。然后 nginx 按照配置文件中列出的顺序检查正则表达式给出的位置。第一个匹配的表达式停止搜索,nginx 将使用这个位置。如果没有正则表达式匹配请求,则 nginx 使用之前找到的最具体的前缀位置。

注意: 所有类型的位置仅测试不带参数的请求行的 URI 部分。这样做是因为查询字符串中的参数可以通过多种方式给出,例如:

此外,任何人都可以在查询字符串中请求任何内容:

现在让我们看看在上面的配置中如何处理请求:

nginx自动添加内网端口

1.内网nginx服务器提供web的端口为8080;

2.通过路由的转换,将8080端口映射为外网的80端口( );

3.访问二级目录 ,此时nginx会出现访问出错,并自动更改端口为内网的8080,即 ;

4.排除了nginx自动添加斜杠的问题,因为nginx从0.8.48这个版本后就已经设置为自动添加了,即

通过端口映射时,nginx会自动添加内网端口,修改路径导致路径访问出错;

在server里面加入

nginx负载均衡

nginx的负载均衡策略有4种,轮询、权重、IP地址哈希、最少连接策略。

示例用nginx默认的负载均衡策略,即轮询策略,本机服务器地址是127.0.0.1,域名localhost指向该地址,访问 三次,轮询转发请求到 、 、 ,接口返回此次调用的服务器端口信息8080、8081、8082。

如图所示:

如图所示,访问三次 ,依次返回8080、8081、8082:

一般而言,linux上安装nginx,配置文件默认路径是在etc/nginx/nginx.conf,当然也可以通过ps -ef|grep nginx来查看启动的nginx是用哪个路径下的配置文件。

编辑好配置文件之后,需要用nginx -t查看此次配置文件有没有出错,没错的话再重新加载配置文件即可,用nginx -s reload命令。

0

评论0