我对 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)
有没有人知道我如何处理这些静态内容?
我使用 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 的 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) 我需要在 Ubuntu 12.04 上的 Nginx 配置中复制以下 Apache 重写规则。nginx 相当于什么:
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]
Run Code Online (Sandbox Code Playgroud) 这是我的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 并使用 sudo 启动它。从 localhost 访问 nginx 欢迎页面工作正常,但是从外部计算机访问它失败。
从外部在计算机上执行 nmap 显示
80/tcp filtered http
Run Code Online (Sandbox Code Playgroud)
很明显,mac防火墙正在阻止该端口。然后我继续将 nginx 可执行文件添加到防火墙例外列表中,但是 nmap 仍然显示为端口 80 被过滤并且我无法访问该网页。列表中的确切二进制文件是 /opt/local/sbin/nginx 据我所知似乎是正确的
任何想法我应该做什么?谢谢!
PS 关闭防火墙确实允许我从外部世界访问网站,但这不是理想的解决方案。
我正在运行带有 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) 我有一个 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 并且:
我已经安装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 访问。
这是我的配置文件:
所以我在Ruby on Rails应用程序/var/www/所拥有的nginx与755权限。所述应用程序旨在通过 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)