标签: nginx

Nginx:从给定目录中提供静态文件 - 一级太深

我对 nginx 配置很陌生。我在一个非常基本的问题上遇到了一些困难。我想在/doc(index.html、一些图像等)上托管一些静态文件。这些文件位于名为 /sites/mysite/proj/doc/ 的目录中。

问题是,使用下面的 nginx 配置,nginx 会尝试查找名为“/sites/mysite/proj/doc/doc”的目录。也许这可以通过将根设置为 /sites/mysite/proj/ 来解决,但我不想潜在地暴露 proj/ 目录中的其他(非静态)资产。由于各种原因,我无法真正将 doc/ 目录从它所在的位置移开。

我认为有一种方法可以使用 Rewrite 规则来解决这种情况,但我并不是真正了解所有部分,因此制定规则有些困难。

rewrite ^/doc/(.*)$ /$1 permanent;
Run Code Online (Sandbox Code Playgroud)

我还包含了一个从 /sites/mysite/htdocs/static/ 目录托管文件的工作示例。

> vim locations.conf

location /static {
    root   /sites/mysite/htdocs/;
    access_log   off;
    autoindex  on;
}

location /doc {
    root   /sites/mysite/proj/doc/;
    access_log   on;
    autoindex  on;
}


2011/11/19 23:49:00 [error] 2314#0: *42 open() "/sites/mysite/proj/doc/doc" failed (2: No such file or directory), client: 100.100.100.100, server: , request: "GET /doc HTTP/1.1", host: "myhost.com"
Run Code Online (Sandbox Code Playgroud)

有没有人知道我如何处理这些静态内容?

rewrite webserver nginx

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

配置 nginx 重试单个上游服务器

我使用 nginx 作为反向代理,如果上游服务器没有响应,我希望它等待几秒钟并重试请求。这样我就可以重新启动我的上游服务器,而不是用户看到 502 bad gateway,他们的浏览器只挂了几秒钟(重新启动过程需要 3 或 4 秒)。我尝试了几件事,我把它放在我的服务器块中:

proxy_connect_timeout 60;
proxy_send_timeout 15;
proxy_read_timeout 20;
Run Code Online (Sandbox Code Playgroud)

但它似乎没有做任何事情。我还尝试将其添加到上游块:

server 127.0.0.1:3001 fail_timeout=10s;
Run Code Online (Sandbox Code Playgroud)

再次,不是我想要的。

这可能吗?我错过了什么?

nginx

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

无法在 alpine linux (docker) 中运行 nginx

好吧,我已经设置了一个带有 nginx 的 alpine linux docker 容器

( apk add nginx)

现在我正在尝试运行 nginx。使用简单命令nginx返回以下错误:

nginx: [emerg] open() "/run/nginx/nginx.pid" failed (2: No such file or directory)
Run Code Online (Sandbox Code Playgroud)

这是什么原因造成的?- 即使作为 root 我也没有打开的权限,/run/所以我无法真正检查出来。我的 nginx.conf 是:

#
events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

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

    ##
    # SSL Settings
    ##

    ssl_protocols …
Run Code Online (Sandbox Code Playgroud)

nginx docker alpine-linux

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

如何删除 nginx 服务的 URL 中的双斜杠?

我需要在 Ubuntu 12.04 上的 Nginx 配置中复制以下 Apache 重写规则。nginx 相当于什么:

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]
Run Code Online (Sandbox Code Playgroud)

rewrite nginx

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

即使 server_name 不匹配,Nginx 也会为站点提供服务

这是我的nginx配置(作为 docker 容器运行,以防万一):

events {
    worker_connections 4096;  ## Default: 1024
}

http {
    server {
        server_name registry.mydomain;
        listen 80;
        listen 443 ssl;
        client_max_body_size 0;  # Disables checking, to avoid "request entity too large"
        ssl_certificate /etc/nginx/certs/registry.crt;
        ssl_certificate_key /etc/nginx/certs/registry.key;

        location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://registry:5000;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,nginx即使是对其他域的请求,它也在为该站点提供服务。这是预期的:

$ http http://registry.mydomain/v2/_catalog?n=100
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 20
Content-Type: application/json; charset=utf-8
Date: Thu, 05 Apr 2018 12:43:21 GMT
Docker-Distribution-Api-Version: …
Run Code Online (Sandbox Code Playgroud)

nginx ubuntu docker

11
推荐指数
1
解决办法
8304
查看次数

Mac防火墙阻止来自外部的nginx(端口80)

我使用端口安装了 nginx 并使用 sudo 启动它。从 localhost 访问 nginx 欢迎页面工作正常,但是从外部计算机访问它失败。

从外部在计算机上执行 nmap 显示

80/tcp   filtered http
Run Code Online (Sandbox Code Playgroud)

很明显,mac防火墙正在阻止该端口。然后我继续将 nginx 可执行文件添加到防火墙例外列表中,但是 nmap 仍然显示为端口 80 被过滤并且我无法访问该网页。列表中的确切二进制文件是 /opt/local/sbin/nginx 据我所知似乎是正确的

任何想法我应该做什么?谢谢!

PS 关闭防火墙确实允许我从外部世界访问网站,但这不是理想的解决方案。

firewall web nginx osx-mountain-lion macos

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

nginx 不记录任何内容

我正在运行带有 nginx 的 FreeBSD 9-Stable 服务器。
我的配置在这里:

user www www;
worker_processes 5;
error_log /var/log/nginx/nginx-error.log;
events {
    worker_connections 1024;
}
http {
    include mime.types;
    include fastcgi_params;
    index index.html index.htm index.php;
    default_type application/octet-stream;
    log_format   main '$remote_addr - $remote_user [$time_local]  $status '
    '"$request" $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';
    sendfile on;
    autoindex  on;
    tcp_nopush on;
    tcp_nodelay on;
    ignore_invalid_headers on;
    gzip on;
    server {
        listen 127.0.0.1;
        server_name localhost;
        location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
        }
    }
    server {
        listen 80; …
Run Code Online (Sandbox Code Playgroud)

freebsd logging nginx

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

为什么要监听 443 default_server; nginx 规则覆盖已配置的规则(http 规则正常工作)?

我有一个 nginx 和不同的子域:

a.mydomain.com
b.mydomain.com
c.mydomain.com
Run Code Online (Sandbox Code Playgroud)

Nginx 有 4 条规则:

1)重写规则:

server {
  listen 80
  server_name gl.udesk.org;

  root /nowhere;
  rewrite ^ https://a.mydomain.com$request_uri permanent;
}
Run Code Online (Sandbox Code Playgroud)

2)https规则:

server {

  listen 443;
  server_name a.mydomain.com;

  root /home/a/a/public;

  ssl on;
  ssl_certificate conf.d/ssl/a.crt;
  ssl_certificate_key conf.d/ssl/a.key;
  ssl_protocols ...
  ssl_ciphers ...
  ssl_prefer_server_ciphers on;

  location ...
}
Run Code Online (Sandbox Code Playgroud)

3)http默认规则:

server {
  listen 80 default_server;
  return 444;
}
Run Code Online (Sandbox Code Playgroud)

4)https默认规则:

server {
  listen 443 default_server;
  return 444;
}
Run Code Online (Sandbox Code Playgroud)

因此,如果我启动 nginx 并且:

https http nginx

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

我无法打开 phpMyAdmin,出现错误 301 或 500

我已经安装phpMyAdmin的,但我不能打开它在任何浏览器:我得到一个301重定向(*)如果我浏览到http://localhost:8080/phpmyadmin。如果我/在地址末尾添加 a ,则会得到 500 错误状态

(*) 使用 Wireshark 捕获。如果我从同一主机上的终端使用 netcat,我会收到301 重定向到不同的地址

该环境是我为开发/测试目的而构建的 VM,我在其中安装了LEMP(Linux/Nginx/MySQL/PHP)环境。这是在 Ubuntu 12.04 64 位主机上作为来宾运行的CentOS 6 64 位的全新安装。VM 运行在带有端口转发的 NATed 模式下。我可以http://localhost:8080在来宾机器上打开并看到 nginx 欢迎页面。我也可以打开一个phpinfo 页面,所以我知道 PHP 正在运行。

我已经分别安装了 nginx、MySQM、PHP 和 phpMyAdmin 包。我正在使用 phpMyAdmin 的默认设置。安装 MySQL 后,我运行了该mysql_secure_installation命令,除其他选项外,我还禁用了远程 root 访问。

这是我的配置文件:

  • /etc/php.ini:链接
  • /etc/php.d/mysql.ini:链接
  • /etc/nginx/nginx.conf:链接
  • /etc/nginx/conf.d/default.conf:链接(为了运行 PHP 脚本,我按照在线教程对其进行了自定义,但我不确定自己在做什么。) …

centos mysql phpmyadmin nginx

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

为什么 nginx 无法访问 CentOS 7 上的 puma 套接字?

所以我在Ruby on Rails应用程序/var/www/所拥有的nginx755权限。所述应用程序旨在通过 puma 部署。

像这样:

rvmsudo -u nginx bundle exec puma -e production -d -b unix:///var/www/my_app/tmp/sockets/my_app.socket
Run Code Online (Sandbox Code Playgroud)

套接字的权限是:

srwxrwxrwx. 1 nginx nginx 0 Nov  6 09:43 tmp/sockets/my_app.sock
Run Code Online (Sandbox Code Playgroud)

进程当然归nginx所有:

nginx     7335  0.0  8.8 536744 90388 ?        Sl   09:43   0:00 puma 2.9.2 (unix:///var/www/my_app/tmp/sockets/my_app.sock)
Run Code Online (Sandbox Code Playgroud)

我的nginx配置配置如下:

upstream my_app {
  server unix:///var/www/my_app/tmp/sockets/my_app.sock;
}

server {
  listen 80;
  server_name www.example.com example.com;
  root /var/www/my_app/public;

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

所有这些和我的应用程序仍然被拒绝权限。

connect() …
Run Code Online (Sandbox Code Playgroud)

rails permissions ruby nginx centos-7

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