标签: nginx-location

nginx 日志的位置

需要一些帮助来设置 nginx 日志,以便它们不会重复。

我的配置如下。我想要实现的是,http://example.com/app的所有日志都转到文件 app.access.log,而网站其余部分的日志则转到文件 main.access.log

但是,以下配置将应用程序日志记录到 app.access.log 和 main.access.log。

server {

       access_log /var/log/nginx/main.access.log;


       location /app {
           access_log /var/log/nginx/app.access.log;
       }
}
Run Code Online (Sandbox Code Playgroud)

知道如何解决这个问题吗?

nginx nginx-location nginx-config

8
推荐指数
1
解决办法
1万
查看次数

Nginnx配置Yii 2高级应用程序模板

我无法配置Nginx服务器,以便:

  • /index.php文件将被发送以响应"index.php"请求.
  • public_html/frontend/web/index.php文件将被发送以响应"admin/index.php"请求.

请问我哪里错了.这是我的配置:

server {
    listen        80;
    server_name   yii2.lo;
    server_tokens off;

    client_max_body_size 128M;
    charset       utf-8;

    access_log    /var/log/nginx/yii2-access.log main buffer=50k;
    error_log     /var/log/nginx/yii2-error.log notice;

    set           $host_path      "/srv/http/yii2/public";
    set           $yii_bootstrap  "index.php";

    index         $yii_bootstrap;

    location / {
        root          $host_path/frontend/web;
        try_files $uri $uri/ /$yii_bootstrap?$args;

    }

    location /admin {
        root          $host_path/backend/web;
        try_files $uri $uri/ /$yii_bootstrap?$args;
    }

    location ~ \.php$ {
        try_files $uri =404;

        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_index           $yii_bootstrap;

        # Connect to php-fpm via socket
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;

        fastcgi_connect_timeout     30s;
        fastcgi_read_timeout        30s;
        fastcgi_send_timeout        60s; …
Run Code Online (Sandbox Code Playgroud)

nginx yii2 nginx-location

7
推荐指数
1
解决办法
1万
查看次数

指定返回时,位置块中的auth_basic不起作用?

我认为这会起作用,但由于某种原因,它会跳过auth_basic并且总是返回200.如果我将200换成301重定向,也会发生同样的情况.

如果我注释掉return语句就行了.理想情况下,我只想要一个/auth端点,一旦通过身份验证,它将301重定向到另一个路径.

 location /auth {
     auth_basic_user_file /etc/nginx/.htpasswd;
     auth_basic "Secret";

     return 200 'hello';
  }
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

非常感谢

FLO

nginx nginx-location

7
推荐指数
1
解决办法
1076
查看次数

后备NGINX位置

我是NGINX的新手,正在迁移服务器。我还没有完成新服务器上的所有操作,因此我希望它与新服务器匹配,除非该资源或路径不存在。如果是这样,我想将其发送到旧服务器。有办法吗?

nginx nginx-location nginx-reverse-proxy

7
推荐指数
1
解决办法
3568
查看次数

nginx try_files 和 add_header

有人可以解释一下吗?

我有一个 nginx 服务器块,其中包含以下代码片段:

location / {
  try_files $uri $uri/ /index.html;
}
Run Code Online (Sandbox Code Playgroud)

基本上,我用它来提供 Angular SPA。它运作良好且很棒。

现在我想将Access-Control-Allow-Origin标头附加到响应中。所以我像这样改变了块:

location / {
  if ($request_method = 'OPTIONS') {
          add_header 'Access-Control-Allow-Origin' '*';
          add_header 'Access-Control-Max-Age' 1728000;
          return 204;
  }
  if ($request_method = 'GET') {
          add_header 'Access-Control-Allow-Origin' '*';
  }
  try_files $uri $uri/ /index.html;
}
Run Code Online (Sandbox Code Playgroud)

现在,每当我访问时,http://<application>.com我都会获得该页面,并且能够导航到http://<application>.com/some-page. 但是如果我直接尝试访问http://<application>.com/some-page,我会得到 nginx 404。以前不是这样的。如果我注释掉if的声明GET,事情就会恢复正常。

为什么?这里的声明有什么区别if

nginx single-page-application nginx-location

7
推荐指数
0
解决办法
2565
查看次数

Nginx 无法在 Windows 10 上创建目录并出现错误:nginx: CreateFile()...failed

我需要找到一种方法/设置来允许 Nginx 运行一个 .bat 文件,该文件将通过 WINDOWS 服务创建目录和文件;我的操作系统是Windows 10。目前,我们的 Windows 服务无法使用以下内容创建目录和文件:

CreateFile() "C:\someForlderName\build\distribution.\nginx/logs/error.log" failed (3: 系统找不到指定的路径)

不知何故,Nginx 没有足够的权限来执行写访问操作,例如在 /Nginx/ 目录中创建 /logs/ 和 /temp/ 等目录。

以前有人遇到过这个问题吗?

windows-services nginx windows-10 nginx-location

6
推荐指数
1
解决办法
1万
查看次数

Nginx 不区分大小写的 proxy_pass

我有一个名为 的站点http://example.com,其中运行着一个可以在http://example.com/app1. app1 位于 nginx 反向代理后面,如下所示:

location /app1/ {
    proxy_pass http://localhost:8080/;
    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)

将尾部斜杠添加到该proxy_pass字段可以让我“删除” URL 的 /app1/ 部分,至少就应用程序而言。所以 app1 认为它正在获取对根 url 的请求(例如,我在 app1 中有一个路由位于'/',而不是'/app1')。

但是,我想让 nginx 不区分大小写。所以无论我去http://example.com/App1还是http://example.com/APP1,它仍然应该将请求转发到app1,删除url的/app1/部分。

当我尝试使用 nginx 不区分大小写的规则时,它不允许将 URI 的其余部分转发到 app1。

location ~* /app1/ {
    proxy_pass http://localhost:8080/;
    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)

nginx nginx-location nginx-reverse-proxy

6
推荐指数
1
解决办法
5312
查看次数

nginx ssl_trusted_certificate 指令不起作用

当我尝试使用此配置启动 nginx 服务器时,出现错误

nginx: [emerg] no ssl_client_certificate for ssl_client_verify
Run Code Online (Sandbox Code Playgroud)

我的配置看起来像

# HTTPS server
server {
    listen       4443;
    server_name  localhost;
    ssl                  on;
    ssl_certificate      /home/user/conf/ssl/server.pem;
    ssl_certificate_key  /home/user/conf/ssl/server.pem;
    ssl_protocols        TLSv1.2;

    ssl_verify_client optional;
    ssl_trusted_certificate /home/user/ssl/certs/certificate_bundle.pem;

    include conf.d/api_proxy.conf;
}
Run Code Online (Sandbox Code Playgroud)

根据错误,我应该使用ssl_client_certificate指令,但根据文档,如果我不想将证书列表发送给客户端,我应该使用ssl_trusted_certificate.

http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

有人可以帮我弄清楚我错过了什么吗?

nginx nginx-location nginx-reverse-proxy nginx-status

6
推荐指数
1
解决办法
7662
查看次数

带和不带斜杠的 nginx 位置

我想创建一个同时捕获http://example.comhttp://example.com/ 的位置以及另一个捕获其他所有内容的位置。第一个将提供静态 html,另一个用于 api 和其他东西。我试过这个:

location ~ /?$ {
    root /var/www/prod/client/www;
}

location ~ /.+ {
    # /sf/ask/1516405831/
    rewrite ^/(.*) /$1 break;
    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_set_header X-NginX-Proxy true;

    proxy_connect_timeout       1s;
    proxy_send_timeout          30s;
    proxy_read_timeout          300s;
    send_timeout                300s;

    proxy_redirect off;
    proxy_pass http://backendPro;
}
Run Code Online (Sandbox Code Playgroud)

但不起作用。我在第一个位置尝试了很多选项,但是当它首先匹配时,第二个不匹配,反之亦然:

location / {
location ~ \/?$ {
location ~ ^/?$ {
Run Code Online (Sandbox Code Playgroud)

nginx nginx-location

6
推荐指数
1
解决办法
1万
查看次数

如果上游启动,则 Nginx 绕过缓存,如果关闭则使用缓存

如果上游启动(max-age 1)绕过缓存并在关闭时使用缓存(proxy_cache_use_stale),我创建了以下配置:

proxy_cache_path   /app/cache/ui levels=1:2 keys_zone=ui:10m max_size=1g inactive=30d;
server {
    ...
    location /app/ui/config.json {
        proxy_cache ui;
        proxy_cache_valid 1d;
        proxy_ignore_headers Expires;           
        proxy_hide_header Expires;
        proxy_hide_header Cache-Control;
        add_header Cache-Control "max-age=1, public";
        proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
        add_header X-Cache-Status $upstream_cache_status;
        add_header X-Cache-Date $upstream_http_date;
        proxy_pass http://app/config.json;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当上游关闭并且客户端仅获得 504 Gateway Timeout 时不使用缓存。我已经阅读了以下文章:

https://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_cache_use_stale

如何配置 NginX 仅在后端关闭时才提供缓存内容(5xx 响应代码)?

https://serverfault.com/questions/752838/nginx-use-proxy-cache-if​​-backend-is-down

它不像我期望的那样工作。任何帮助表示赞赏。

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

6
推荐指数
1
解决办法
2355
查看次数