我正在尝试使用以下Nginx.conf
文件启动 Docker 容器,但总是出现getpwnam("nginx") failed (2: No such file or directory)
错误。
我尝试在主上下文中使用用户 nobody; 但是这也不起作用。
我甚至在我的 Synology 上创建了一个 nginx 用户来查看是否有区别。
直到我开始添加 SSL 证书时才出现此错误。不太确定我做错了什么!
http {
server {
listen 8080;
server_name www.servername.com;
return 301 https://$host$request_uri;
}
server {
listen 8443 ssl default deferred;
server_name www.servername.com;
ssl_certificate_key /privkey.pem;
ssl_certificate /fullchain.pem;
ssl_trusted_certificate /fullchain.pem;
# Improve HTTPS performance with session resumption
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
# Enable server-side protection against BEAST attacks
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
# Disable SSLv3
ssl_protocols TLSv1.1 TLSv1.2;
# Diffie-Hellman parameter for DHE ciphersuites
# $ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
# ssl_dhparam /etc/ssl/certs/dhparam.pem;
# Enable HSTS (https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security)
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
# Enable OCSP stapling (http://blog.mozilla.org/security/2013/07/29/ocsp-stapling-in-firefox)
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
location / {
proxy_pass http://192.168.1.4:38077;
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_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
}
}
答案1
我认为您在指定 SSL 证书路径时出错了。请使用证书文件的完整路径作为指令ssl_certificate_key
、ssl_certificate
和ssl_trusted_certificate
。例如
ssl_trusted_certificate /etc/nginx/ssl/fullchain.pem;
答案2
搞清楚了。查看了官方的 Nginx docker 镜像及其 docker-compose 脚本后,用户“nginx”被写入了镜像本身。
基本上,容器肯定搞砸了。缺少嵌入在镜像中的 nginx 用户是一个严重的问题,所以我只是删除了容器(以及镜像,以确保万无一失),重新下载镜像,然后使用完全相同的参数再次启动它,它运行良好。
我认为问题在于,在弄清楚 nginx 等时,我对挂载在图像上的卷进行了大量更改,并且我一定是以某种方式弄乱了内部 .conf。