需要一些帮助来设置 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服务器,以便:
/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) 我认为这会起作用,但由于某种原因,它会跳过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 / {
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 运行一个 .bat 文件,该文件将通过 WINDOWS 服务创建目录和文件;我的操作系统是Windows 10。目前,我们的 Windows 服务无法使用以下内容创建目录和文件:
CreateFile() "C:\someForlderName\build\distribution.\nginx/logs/error.log" failed (3: 系统找不到指定的路径)
不知何故,Nginx 没有足够的权限来执行写访问操作,例如在 /Nginx/ 目录中创建 /logs/ 和 /temp/ 等目录。
以前有人遇到过这个问题吗?
我有一个名为 的站点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: [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
有人可以帮我弄清楚我错过了什么吗?
我想创建一个同时捕获http://example.com和http://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) 如果上游启动(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