标签: nginx

nginx 登录到 access.log.1 而不是 access.log,logrotate 失败?

我有一个 nginx 实例,该实例设置为将访问记录到 /var/log/nginx/access.log 并将错误记录到 /var/log/nginx/errors.log,但是一旦 logrotate 每周运行,文件就会移动到*.log.1 和新的 *.log 文件被创建,但 nginx 继续记录到 log.1 文件而不是新的 .log 文件(并且没有任何内容被压缩)。我第一次注意到这一点,自日志轮换以来已经过去了 3 周,并且日志变得越来越大。运行kill -HUP `cat /run/nginx.pid`使 nginx 再次开始记录到正确的位置,但问题在下周再次出现。

这令人沮丧的更重要的原因是我将日志设置为通过 rsyslog 上传到 Loggly,当 nginx 停止记录到文件时,我有 rsyslog 轮询,然后事情停止上传,我没有收到任何警报。

我怀疑这与重新启动 nginx 或重新加载配置有关,因为它直到我进行了配置更改并以我认为正常的方式重新加载配置后才启动。我尝试运行,kill -USR1 `cat /run/nginx.pid`但文件继续记录到错误的位置,直到我运行kill -HUP `cat /run/nginx.pid`,我已经知道这不能解决问题。

知道发生了什么吗?我承认我不是 logrotate 或 nginx 管理方面的专家,但我的谷歌在这方面失败了。

这是我的 nginx logrotate 脚本,如果您还有什么想看的,请告诉我。除了定义输出位置之外,nginx.conf 在日志记录方面没有什么特别之处。

/var/log/nginx/*.log {
        weekly
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 0640 www-data adm
        sharedscripts
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts …
Run Code Online (Sandbox Code Playgroud)

ubuntu nginx logging web-server logrotate

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

有没有一种优雅的方法可以一次阻止一堆推荐人?

为了防止引用垃圾邮件,我的 nginx.conf 包含这样的部分:

if ($http_referer ~* spamdomain1\.com) {
    return 444;
}
if ($http_referer ~* spamdomain2\.com) {
    return 444;
}
if ($http_referer ~* spamdomain3\.com) {
    return 444;
}
Run Code Online (Sandbox Code Playgroud)

如果用户设置了这些引用之一,这些规则告诉 nginx 只是关闭连接。有没有更优雅的方法来做到这一点?我可以定义这些域的列表,然后说“如果引用者在此列表中,则返回 444”吗?

nginx

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

基于用户代理的 Nginx 重定向

这是我当前的 nginx 配置:

server {
  listen 90;
  server_name www.domain.com www.domain2.com;
  root /root/app;
  location / {
    try_files $uri =404;
  }
  location ~ /([-\w]+)/(\w+)/ {
    proxy_pass bla bla
  }
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,都www.domain.comwww.domain2.com服务相同的内容。

现在我想补充

如果用户正在访问 www.domain.com 并且用户代理是 xxx 然后重定向到 www.domain2.com

我已经搜索并尝试了很多方法,但没有一个有效。

nginx

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

使用 nginx 的 Varnish 比只使用 nginx 更好吗?

我看到很多关于在 Varnish 中使用 nginx 的讨论,但我不明白为什么。nginx 还不够吗?

Nginx 有 SSI,有反向代理缓存,轻量级,有 SSL,可以使用 cgi、fpm 等。

Varnish 具有相同的功能,但没有 ssl,也没有 cgi 支持。

nginx varnish

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

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

Nginx - 重写或返回重定向?

我有两种重定向选项(返回和重写),但我不确定对于性能、搜索引擎优化等推荐哪个选项:

## Redirect from non-www to www
server {
        server_name example.com;
        # Option 1
        return 301 $scheme://$host$request_uri;

        # Option 2
        rewrite ^ http://$host$request_uri? permanent;
    }

## Default server config

server {
        ...
        listen      192.168.1.1:80 default_server;
        root        /www;
        server_name www.example.com;
Run Code Online (Sandbox Code Playgroud)

选项 2 似乎适用于 curl,但在浏览器调用时它不会重定向,并且返回代码是临时重定向的代码,尽管重写指令设置为permanent

 curl -I example.com
 HTTP/1.1 302 Moved Temporarily
 Server: nginx
 ...
 Location: http://www.example.com/
 ...
Run Code Online (Sandbox Code Playgroud)

linux nginx

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

无法使用 SSL 支持编译 nginx,找不到 OpenSSL

我正在尝试从启用 SSL 模块的源代码编译 nginx。当我运行此命令时:

./configure --with-http_ssl_module
Run Code Online (Sandbox Code Playgroud)

它会执行通常的检查以查看所有内容是否安装正确,然后会弹出:

检查 OpenSSL 库...未找到

./configure: 错误:SSL 模块需要 OpenSSL 库。您可以不启用这些模块,也可以将 OpenSSL 库安装到系统中,或者使用 --with-openssl= 选项使用 nginx 从源静态构建 OpenSSL 库。

我知道是安装OpenSSL的事实,因为当我做openssl version我得到OpenSSL 1.0.1 14 Mar 2012

所以我很难过。我想也许 OpenSSL 没有安装在它的默认位置,这就是 nginx 找不到它的原因,但我不知道它在哪里,因为它预装在服务器上。我怎样才能知道这是哪里?

服务器正在运行 Ubuntu 12.04 LTS。

谢谢。

ubuntu nginx openssl

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

将通配符子域重定向到 https (nginx)

我有一个通配符 ssl 认证,我正在尝试将所有非 ssl 流量重定向到 ssl。目前,我正在使用以下内容重定向工作正常的非子域 url。

server {
listen      80;
server_name mydomain.com;

#Rewrite all nonssl requests to ssl.
rewrite     ^ https://$server_name$request_uri? permanent;
}
Run Code Online (Sandbox Code Playgroud)

当我对 *.mydomain.com 做同样的事情时,它在逻辑上会重定向到

https://%2A.mydomain.com/
Run Code Online (Sandbox Code Playgroud)

你如何将所有子域重定向到它们的 https 等价物?

nginx https

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

Nginx - 转发 HTTP 身份验证 - 用户

我在使用 Nginx 和 Jenkins (Hudson) 时遇到了一些麻烦。我正在尝试使用 Nginx 作为具有 HTTP 基本身份验证的 Jenkins 实例的反向代理。

到目前为止它有效,但我不知道如何使用身份验证用户名传递标头。

location / {
  auth_basic "Restricted";
  auth_basic_user_file /usr/share/nginx/.htpasswd;
  sendfile off;

  proxy_pass         http://192.168.178.102:8080;
  proxy_redirect     default;
  proxy_set_header   Host             $http_host;
  proxy_set_header   X-Real-IP        $remote_addr;
  proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
  proxy_set_header   X-Forwarded-User $http_authorization; 
  proxy_max_temp_file_size 0;

  #this is the maximum upload size
  client_max_body_size       10m;
  client_body_buffer_size    128k;

  proxy_connect_timeout      90;
  proxy_send_timeout         90;
  proxy_read_timeout         90;             
  proxy_buffer_size          4k;
  proxy_buffers              4 32k;
  proxy_busy_buffers_size    64k;
  proxy_temp_file_write_size 64k;
}
Run Code Online (Sandbox Code Playgroud)

ubuntu nginx http-basic-authentication jenkins

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

nginx 打开的文件太多,似乎无法提高限制

服务器是 Ubuntu 13.04 (GNU/Linux 3.9.3-x86_64-linode33 x86_64)。

nginx 是 nginx/1.2.6。

我已经为此工作了几个小时,所以这就是我得到的,这就是我所做的。

tail -f /usr/local/nginx/logs/error.log
2013/06/18 21:35:03 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 …
Run Code Online (Sandbox Code Playgroud)

nginx ulimit file-descriptors

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