标签: nginx-location

Nginx-连接已重置?

我在Linode的主机上安装了Ngnix。我有以下配置:

server {
    listen 80;
    server_name example.co.uk www.example.co.uk;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

server {
    listen 3333;
    server_name example.co.uk www.example.co.uk;

    location / {
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   Host      $http_host;
            proxy_pass         http://127.0.0.1:3838;
    }
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当我通过已经指向IP地址的域名访问端口时,Ngnix有时会返回“无法访问此站点”(在Chrome和Opera上)“连接已重置”(在Firefox上)。

example.co.uk - Fails at times
example.co.uk:3333 - Fails at times
Run Code Online (Sandbox Code Playgroud)

通过IP访问端口永远不会有任何问题,例如。

139.160.200.50 - OK
139.160.200.50:3333 -OK
Run Code Online (Sandbox Code Playgroud)

这种奇怪的原因是什么?

有任何想法吗?

webserver nginx domain-name linode nginx-location

5
推荐指数
0
解决办法
2145
查看次数

POST 响应缓存在 nginx 中不起作用

我的任务是使用nginx实现微缓存策略,即缓存一些POST端点的响应几秒钟。

http部分nginx.conf我有以下内容:

proxy_cache_path /tmp/cache keys_zone=cache:10m levels=1:2 inactive=600s max_size=100m;
Run Code Online (Sandbox Code Playgroud)

然后我locationserver

    location /my-url/ {
      root dir;
      client_max_body_size 50k;
      proxy_cache cache;
      proxy_cache_valid 10s;
      proxy_cache_methods POST;
      proxy_cache_key "$request_uri|$request_body";
      proxy_ignore_headers Vary;

      add_header X-Cached $upstream_cache_status;

      proxy_pass http://my-upstream;
    }
Run Code Online (Sandbox Code Playgroud)

该应用程序位于输出处,如果我理解正确的my-upstreamCache-Control: max-age=10,应该使响应可缓存。

但是当我在短时间内(不到10秒)使用curl发出重复请求时

curl -v --data "a=b&c=d" https://my-host/my-url/1573
Run Code Online (Sandbox Code Playgroud)

它们全部到达后端(根据后端日志)。还有,X-Cached总是MISS

请求和响应如下:

> POST /my-url/1573 HTTP/1.1
> Host: my-host
> User-Agent: curl/7.47.0
> Accept: */*
> Content-Length: 113
> Content-Type: application/x-www-form-urlencoded
> 
* upload …
Run Code Online (Sandbox Code Playgroud)

caching nginx http-post nginx-location nginx-cache

5
推荐指数
1
解决办法
2561
查看次数

使用 nginx 在同一域上提供 React 前端和 php 后端

我有一个 React 前端和一个 Symfony 后端,我试图在同一个域上提供服务。React 前端需要提供资产(如果存在),否则回退到服务index.html

我想/api在请求 uri 中提供 php Symfony 应用程序。与 React 应用程序类似,我需要将所有请求转到该index.php文件。

前端服务正常,但 api 服务不正确。/api当我在浏览器中点击时,我从 nginx 收到 404 错误。

我觉得我已经很接近了,但由于某种原因 nginx 没有正确的$document_root. 我添加 header( X-script) 来测试变量是什么,我得到以下结果:

X-script: /usr/share/nginx/html/index.php
Run Code Online (Sandbox Code Playgroud)

这是我的 nginx 配置。

server {
    listen 80 default_server;
    index index.html index.htm;

    access_log /var/log/nginx/my-site.com.log;
    error_log /var/log/nginx/my-site.com-error.log error;

    charset utf-8;

    location /api {
        root /var/www/my-site.com/backend;
        try_files $uri $uri/ /index.php$is_args$args;
    }
    location / {
        root /var/www/my-site.com/frontend;
        try_files $uri /index.html;
    }
    location ~* …
Run Code Online (Sandbox Code Playgroud)

nginx symfony nginx-location

5
推荐指数
1
解决办法
4148
查看次数

配置 nginx 发出后台请求

我正在构建一个应用程序,需要对 api-数据组合使用情况进行一些分析。下面是我的 nginx 配置 -

location /r/ {
    rewrite /r/(.*)$ http://localhost:3000/sample/route1/$1 redirect;
    post_action /aftersampleroute1/$1;
}
location /aftersampleroute1/ {
    rewrite /aftersampleroute1/(.*) /stats/$1;
    proxy_pass http://127.0.0.1:3000;
}
Run Code Online (Sandbox Code Playgroud)

location/r/用于将浏览器请求重定向http://localhost:80/r/quwjDP4us到 api /sample/route1/quwjDP4us,该 api 使用 idquwjDP4us执行某些操作。现在在后台我想将 id 传递quwjDP4us给统计 api/stats/quwjDP4us,该 api 会更新该 id 的数据库记录。

当我启动 nginx 并发出请求时,http://localhost:80/r/quwjDP4usnginx 成功将我的请求重定向到我的应用程序,但不会在后台向 stats api 发出第二个请求。我缺少什么?

注意 -post_action不包含在 nginx 文档中,是否有我可以使用的备用模块/指令?

proxy nginx nginx-location nginx-reverse-proxy

5
推荐指数
1
解决办法
4620
查看次数

我可以在 Nginx 中创建一个“私有”位置吗?

我可以创建一个位置,该位置可以被 nginx 配置中的任何其他位置访问,但不能从外部直接访问吗?

我可以使用拒绝指令,但它也会拒绝访问 nginx 配置中定义的位置。

这是我的配置 -

server {
  listen *:80;
  server_name 127.0.0.1;

  location = /auth {
      set $query '';
      if ($request_uri ~* "[^\?]+\?(.*)$") {
         set $query $1;
      }
      # add_header X-debug-message "Parameters being passed $is_args$args" always;
      proxy_pass http://127.0.0.1:8080/auth?$query;
  }

  location /kibana/ {
     rewrite ^/kibana/(.*) /$1 break;
     proxy_pass http://127.0.0.1:5601;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection 'upgrade';
     proxy_set_header Host $host;
     proxy_set_header X-Forwarded-For $remote_addr;
     proxy_set_header  X-Real-IP  $remote_addr;
     proxy_cache_bypass $http_upgrade;
     auth_request /auth;
  }

  location ~ (/app/|/app/kibana|/bundles/|/kibana4|/status|/plugins|/ui/|/api/|/monitoring/|/elasticsearch/) {
     internal;
     proxy_pass http://127.0.0.1:5601;
     proxy_http_version …
Run Code Online (Sandbox Code Playgroud)

nginx auth-request nginx-location nginx-config

5
推荐指数
1
解决办法
2496
查看次数

Nginx + Docker。504网关超时

我一直在为此苦苦挣扎,我开始变得沮丧......

我正在使用 Ubuntu 18.10 在 DigitalOcean 上运行 Droplet

我使用Docker来提供不同的服务(nuxt、socket.io、nginx、nodejs)

我已经使用Nginx来revese代理这些服务(起初我只想渲染 nuxt 应用程序)

执行时

docker-compose up --build -d
Run Code Online (Sandbox Code Playgroud)

所有进程都在运行并且可以在服务器上访问,但无法从我的本地计算机访问(我收到 504 网关超时)。

有一次我让它工作了,但是当添加一些位置规则时,它再次崩溃了。

这是我的nginx配置:

server {
    listen 8080;
    server_name 104.248.201.255;

    location / {
        proxy_pass http://doodlehelha-nuxt:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的docker-compose.yml中的 nginx 服务

nginx:
    image: nginx:1.15
    container_name: doodlehelha-nginx
    ports:
      - '8080:8080'
      - '443:443'
    expose:
        - '8080'
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - nuxt
      - api
      - socket
Run Code Online (Sandbox Code Playgroud)

这是一个非常简单的配置,这就是为什么我不知道出了什么问题......如果更有经验的人可以指出,我将非常感激。

nginx docker nginx-location nginx-reverse-proxy nginx-config

5
推荐指数
0
解决办法
6464
查看次数

使用命令“nginx”、“service start nginx”和“systemctl nginx start”启动nginx有什么区别?

我注意到,当我使用 ubuntu 命令“nginx”启动 nginx 时,我会执行 systemctl status nginx。它表明 systemctl 被禁用。更重要的是,如果我首先使用命令 systemctl start nginx 启动 nginx,然后尝试使用命令 nginx 启动 nginx,它会检查端口的可用性,然后说 nginx: [emerg] 仍然无法绑定()。所以我认为他们的目的一定是不同的。当我使用命令 nginx strt nginx 时,停止 nginx 的唯一方法是强制使用killlall nginx或kill -9(进程ID)或清除端口。所以我很确定它们之间存在一些差异。

nginx nginx-location nginx-reverse-proxy

5
推荐指数
1
解决办法
4775
查看次数

为什么我在 nginx 反向代理上收到 404?

下面是我的配置,除了路由之外,我在定义的所有路由上都收到 404 well-known,我不明白为什么。

如果我向http://example.tech/connect发出请求,我会收到 404,如果我向http://api.example.tech发出请求,我也会收到 404。

我看不出我哪里出了问题,因为这看起来应该可行!

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;
    error_log  /var/log/nginx/error.log  warn;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    #REMOVE REFERENCE TO FILES THAT HAVE  "server" and "location" blocks in them so we can do it all in this file …
Run Code Online (Sandbox Code Playgroud)

nginx nginx-location nginx-reverse-proxy

5
推荐指数
2
解决办法
2万
查看次数

无法使用 url 通过 nginx 在 React 中导航

我正在使用 nginx(反应前端)提供静态文件。我为每个页面使用了不同的网址,例如 /login /user /home 。

我的 nginx 不会将这些重定向到我的 index.html 文件。

我做了一些更改,现在我也无法访问我的主页。它返回无法获取/。

这是我的 nginx.conf 文件。我在 Windows 上运行它。我的index.html 位于build 文件夹内。如何让我的nginx使用reactjs中的Router和Link,以便我可以通过引用链接或通过导航栏获取页面?

worker_processes  5;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;


    server {
        listen   80;
        server_name  ip;

        location / {
            root   /Users/username/projectfolder/build;    
            index  index.html index.htm;
            try_files $uri $uri/ index.html;
            proxy_pass http://ipaddress:portnumber;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

更新:

我尝试过以下配置

server {
        listen some_port;
        server_name some_ip; …
Run Code Online (Sandbox Code Playgroud)

nginx reactjs nginx-location nginx-config

5
推荐指数
1
解决办法
2405
查看次数

如何在 nginx 中以有条件的方式将 proxy_protocol 设置为“on”?

有人熟悉 nginx 吗?我试图在流块中以有条件的方式启用 proxy_protocol,即对于某些端点,我希望添加代理协议标头。对于其他人我不想添加它。查看文档,proxy_protocol 无法获取变量(尝试了 map 指令) 关于如何实现此目的有什么建议吗?在这里添加了我的 nginx 配置。 http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_protocol

这是有问题的部分proxy_protocol $proxy_state;

   map $ssl_preread_server_name $proxy_state{
        default on;
        facebook.com off;
    }
    server {
        listen 8443 ;
        resolver 8.8.8.8 ipv6=off;        
        proxy_pass $server;
        proxy_protocol $proxy_state;
        ssl_preread on;

    }
Run Code Online (Sandbox Code Playgroud)

以下是完整的配置

error_log logs/error.log;

events {
}


stream {

    map $ssl_preread_server_name $server { 
        # default 127.0.0.1:8080;
        default unix:/var/run/nginx.sock;
        include /home/user/allow_url_list;

    } 
    map $ssl_preread_server_name $proxy_state{
        default on;
        facebook.com off;
    }
    server {
        listen 8443 ;
        resolver 8.8.8.8 ipv6=off;        
        proxy_pass $server;
        proxy_protocol $proxy_state;
        ssl_preread on;
        
    } …
Run Code Online (Sandbox Code Playgroud)

nginx nginx-location nginx-reverse-proxy nginx-config

5
推荐指数
1
解决办法
1591
查看次数