相关疑难解决方法(0)

nginx HTTPS 使用与 HTTP 相同的配置

有没有办法在两个 nginxserver {}块之间共享配置指令?我想避免重复规则,因为我网站的 HTTPS 和 HTTP 内容使用完全相同的配置。

目前,它是这样的:

server {
  listen 80;
  ...
}

server {
  listen 443;

  ssl on; # etc.
  ...
}
Run Code Online (Sandbox Code Playgroud)

我可以做一些类似的事情:

server {
  listen 80, 443;
  ...

  if(port == 443) {
    ssl on; #etc
  }
}
Run Code Online (Sandbox Code Playgroud)

nginx https

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

如何编写具有命名位置的 DRY、模块化 nginx conf(反向代理)

我主要使用 nginx 作为几个 gunicon/mod_wsgi 应用程序前面的反向缓存代理,当然还有服务器静态文件。

我发现很快我的 nginx 配置就变得无法维护;问题是我有一些相似(甚至相同)的模式,但我无法使它干净。

我遇到的最大问题之一是我喜欢使用命名位置作为对一组 conf 进行分组的一种方式,例如。

location @django_modwsgi {
    include proxy.conf;
    proxy_pass  http://127.0.0.1:8080;        
}

location @django_gunicorn {
    include proxy.conf; # this could also be included directly in the server {} block?
    proxy_pass  http://gunicorn_builder;
}
Run Code Online (Sandbox Code Playgroud)

注意。 问题在于同时拥有 gunicorn 和 wsgi。那只是一个例子。另一种是:

location @namedlocation_1 {
     some cache settings;
     some cache_key settings;
     ignore some headers;
     expires;
     proxy_pass
}

location @namedlocation_2 {
     other cache settings;
     other cache_key settings;
     ignore some headers;
     expires;
     proxy_pass
}
Run Code Online (Sandbox Code Playgroud)

但是要调用命名位置,我发现的唯一方法是:

location …
Run Code Online (Sandbox Code Playgroud)

configuration nginx

26
推荐指数
1
解决办法
8457
查看次数

如何以编程方式仅将特定的 nginx 服务器块设置为维护模式

我正在寻找一种解决方案来自动化我们应用程序的部署过程之一。在部署开始时,我想以编程方式将指定的服务器设置为维护模式,最后在部署完成后,从 nginx 服务器中删除维护模式标志。

通过维护模式,我的意思是 nginx 应该以 HTTP 响应代码 503 响应所有请求(可能带有自定义页面)。

我知道如何设置服务器块以响应 503 代码(请参阅http://www.cyberciti.biz/faq/custom-nginx-maintenance-page-with-http503/)但问题是如何以编程方式执行此操作并且最有效。

我想到了两个选择:

选项1:在部署过程开始时,将维护文件写入文档根目录,并有条件地检查nginx服务器配置中是否存在维护文件:

server {
    if (-f $document_root/in_maintenance_mode) {
        return 503;
    }
}
Run Code Online (Sandbox Code Playgroud)

此方法包含一定的开销,因为每个请求都会检查文件是否存在。是否可以仅在加载 nginx 配置时检查文件是否存在?

选项 2:部署脚本用维护版本替换整个 nginx 服务器配置文件,并在部署结束时将其换回。如果使用此方法,我担心可能会覆盖维护配置文件的其他自动化进程,例如 puppet。

automation maintenance deployment nginx

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

“未指定输入文件”错误 - NginX / fcgi - 请求不存在的 .php 文件时

我有 NginX 使用 fcgi 为 drupal 站点提供服务。尝试浏览不存在的 php 文件(例如 www.example.com/this-file-doesn't-exist.php)会导致出现以下错误的白屏:

'未指定输入文件'

我用这篇文章来帮助我设置 NginX:http : //drupal.org/node/110224

这是我的 NginX 配置文件:

server {
listen 1.2.3.4:80 default;
server_name www.example.com;

client_max_body_size 6M;

root /var/www/example.com/;
index index.php;

error_page 404 /index.php;
error_page 403 /403.html;

# set up a location to serve static images for static error pages
location ^~ /error_images/ {
  root   /var/www/static_pages/error_pages;
  access_log        off;
  expires           30d;
}

# use our own custom 403 page
location = /403.html {
  root   /var/www/static_pages/error_pages;
}

# redirect server error …
Run Code Online (Sandbox Code Playgroud)

php nginx fastcgi drupal

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