我使用fedora 17,当我使用unix域套接字设置带有uwsgi的nginx时,当我将套接字放置在具有适当权限的目录中时就可以了,但是当我将套接字放入其中/tmp时会导致nginx错误:
connect() to unix:/tmp/MySite.sock failed (2: No such file or directory) while connecting to upstream
Run Code Online (Sandbox Code Playgroud)
该文件确实存在并且对 nginx 用户具有读/写权限。但是是什么导致了这个错误,它真的让我发疯,有人可以弄清楚。
我试图让我的 nginx 重定向尽可能干净。我知道 ~* 不区分大小写,但我只能让它在示例 2 中工作。
示例 1
rewrite ^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
Run Code Online (Sandbox Code Playgroud)
示例 2 - 这有效,但不如上面的行有效。
if ( $request_filename ~* foobar ) {
rewrite ^ http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用示例 1 进行不区分大小写的重定向而不会让它变得太混乱?
谢谢。
我需要复制/镜像进入我的服务器/资源的流量。
我的意思是,我有服务器 A、B 和 N(nginx)作为网络服务器。
所有进入 N/resource 的流量 --> 重定向到 A 和 B
是否可以?
我一直在错误日志中看到以下错误消息,我可以访问所有资源,但我不确定错误标记的原因。
错误:
[错误] 13368#0:*449 connect() 失败(111:连接被拒绝),同时连接到上游,客户端:xxxx,服务器:myserver.com,请求:“GET /stories/mine HTTP/1.1”,上游:“ http://[::1]:5000/stories/mine ”,主机:“myserver.com”
我正在将连接传递到node.js在端口 5000 上运行的集群。看不到我会错过什么?
upstream api {
server localhost:5000;
}
server {
listen 80;
server_name myserver.com;
root /home/user/_api;
# Logging
error_log /home/user/log/api.error.log notice;
location / {
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Connection "";
proxy_cache one;
proxy_cache_key sfs$request_uri$scheme;
proxy_pass http://api;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Run Code Online (Sandbox Code Playgroud) 我尝试php5-fpm通过卷与我的nginx网络服务器共享我的套接字。Fpm 和 nginx 在不同的容器中运行,我想让它们通过共享卷工作,我将 fpm 中的套接字文件放在那里。
2014/04/13 10:53:35 [crit] 33#0: *1 connect() to unix:/container/fpm/run/php5-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 192.168.8.2, server: docker.dev, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://unix:/container/fpm/run/php5-fpm.sock:", host: "docker.dev"
Run Code Online (Sandbox Code Playgroud)
我已经尝试将权限设置为 777 并将组更改php5-fpm.socket为www-data.
fpm 容器的 Dockerfile
FROM ubuntu:13.10
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y php5-cli php5-common
RUN apt-get install -y php5-fpm php5-cgi
ADD ./php-fpm.conf /etc/php5/fpm/php-fpm.conf
ADD ./pool.d/www.conf /etc/php5/fpm/pool.d/www.conf
ADD ./php.ini /etc/php5/fpm/php.ini
CMD ["/usr/sbin/php5-fpm"] …Run Code Online (Sandbox Code Playgroud) 我有两台服务器,都有 nginx。服务器 A 正在侦听 443 并配置为使用客户端 SSL 证书进行身份验证。
服务器 B 有一个内部进程,需要通过 nginx 与服务器 A 通信。
我想在服务器 B 上配置 Nginx,它将侦听 8080(没有加密,因为它都是本地通信)和 proxy_pass 到 ServerA:443。
问题是如何注入客户端证书?我没有找到任何可以做到这一点的 proxy_xxxx 函数。
我确实知道如何使用 socat 进行等效,但我的要求是使用 nginx。
三个问题希望有人能帮忙解答:
我正在运行 CentOS 6,LEMP 堆栈
我在 nginx 代理后面有一个 REST API。代理工作正常,但我无法缓存任何响应。任何帮助将非常感激:
Nginx 配置:
worker_processes 10;
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
proxy_cache_path /path/to/cache/dir keys_zone=one:60m;
proxy_cache_methods GET HEAD POST;
upstream backend {
server server1 backup;
server server2 weight=5;
}
access_log logs/access.log;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 7076;
server_name localhost;
#charset koi8-r;
access_log logs/host.access.log;
location / {
add_header 'Access-Control-Allow-Origin' *;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'Content-Type,Accept';
add_header 'Access-Control-Allow-Methods' 'GET, …Run Code Online (Sandbox Code Playgroud) 我目前有一个在 Nginx 上为 foo.domain.com 运行的虚拟主机,一切正常。
我为要添加的新子域创建了一个新文件,名为 bar.domain.com。我对两者使用相同的设置。
当我重新启动 Nginx 时,我得到
Restarting nginx: nginx: [warn] conflicting server name "" on 0.0.0.0:443, ignored nginx.
Run Code Online (Sandbox Code Playgroud)
当我访问 bar.domain.com 时,我看到了我应该看到的内容,但是当我访问 foo.domain.com 时,我看到了 bar.domain.com 链接到的页面。
富
upstream php-handler {
server unix:/var/run/php5-fpm.sock;
}
server {
listen 80;
server_name foo.domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443;
ssl on;
ssl_certificate [path_foo]/cacert.pem;
ssl_certificate_key [path_foo]/privkey.pem;
root [path]/foo;
...
}
Run Code Online (Sandbox Code Playgroud)
酒吧
server {
listen 80;
server_name bar.domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443;
ssl on;
ssl_certificate [path_bar]/cacert.pem;
ssl_certificate_key …Run Code Online (Sandbox Code Playgroud) 我们使用 Nginx 作为我们的 Web 应用程序服务器的反向代理。Nginx 处理我们的 SSL 等,但在其他方面只是充当反向代理。
我们希望为请求提供有效的客户端证书,/jsonrpc但不要求在其他任何地方使用它们。我们发现的最好方法是
server {
listen *:443 ssl;
ssl on;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_client_certificate /etc/nginx/client-ca.crt;
ssl_verify_client optional;
location /jsonrpc {
if ($ssl_client_verify != "SUCCESS") { return 403; }
proxy_pass http://localhost:8282/jsonrpc-api;
proxy_read_timeout 90;
proxy_redirect http://localhost/ $scheme://$host:$server_port/;
}
}
Run Code Online (Sandbox Code Playgroud)
这适用于大多数浏览器,但某些浏览器(例如 Safari 和 Chrome-on-Android)最终会提示用户无论在网站上的哪个位置都提供客户端证书。
我们如何让 Nginx 接受但并不真正关心除我们/jsonrpc所在位置以外的任何地方的客户端证书?