问题描述
docker安装的nginx可以正常访问nginx的index.html,但是不能访问default.conf中定义的路径(404错误)
default.conf文件
nginx.conf文件
遇到的问题图片
容器挂载情况
通过路径访问
访问80端口
第一种docker安装的nginx
Docker安装
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
systemctl start docker
Docker安装Nginx
docker pull nginx
docker run --name nginx --restart=always -d -p 80:80 nginx
mkdir achong
mkdir achong
mkdir -p images/xq
mkdir -p webps/xq
mkdir -p videos/xq
mkdir -p jsons
mkdir ssl
cd /usr/local
mkdir -p nginx/{conf,log,html}
docker cp nginx:/etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf
docker cp nginx:/etc/nginx/conf.d /usr/local/nginx/conf/conf.d
docker cp nginx:/usr/share/nginx/html /usr/local/nginx
docker cp nginx:/var/log/nginx /usr/local/nginx/log
docker stop nginx
docker rm nginx
docker run --name nginx --restart=always -p 80:80 -p 443:443 -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx/conf/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v /usr/local/nginx/log:/var/log/nginx -v /usr/local/nginx/html:/usr/share/nginx/html -v /usr/local/nginx/conf/cert:/etc/nginx/cert -v /achong:/root -d nginx
cd conf/conf.d
vim default.conf
docker restart nginx
注意下面(这玩意儿搞了两三天,刚去喝水想到的解决方法)
-v /achong:/root
前面的/achong是我的宿主机的数据存放路径,我将要访问的数据在这里
后面的/root是容器中复制我们文件的路径
这样我们在/achong中进行数据文件修改,容器中的数据也会发生改变
-p 443:443
一定要在启动命令中加上这个开放docker的443端口,不然nginx监听不到
服了,9个字符从昨晚到现在
修改nginx配置:路径访问这里的路径是相对于容器而言的,容器相当于一个linux系统,只能访问容器中的数据,但是前面-v /achong:/root将宿主机与容器之间连接了起来,绑定,这样就实现了数据访问
default.conf中添加下面的三行
location /files {
alias /root;
}
第二种wget安装的nginx
这种情况完全不用考虑上面那种挂载的情况,因为nginx和宿主机是在同空间的
链接地址wget安装nginx进行路径访问
Docker容器安装的Nginx安装证书
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server {
listen 443 ssl;
server_name www.alijeon.com;
ssl_certificate cert/9503417_www.alijeon.com.pem;
ssl_certificate_key cert/9503417_www.alijeon.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location /files/ {
alias /root/;
}
}
include /etc/nginx/conf.d/*.conf;
}
PHP安装
docker pull php:5.6-fpm
docker run --name myphp-fpm -v /usr/local/nginx/www:/www -d php:5.6-fpm
vim default.com
default.conf文件
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location /files/ {
alias /root/;
}
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
重启nginx
docker run --name nginx --restart=always -p 80:80 -p 9000:9000 -p 443:443 -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx/conf/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v /usr/local/nginx/log:/var/log/nginx -v /usr/local/nginx/html:/usr/share/nginx/html -v /usr/local/nginx/conf/cert:/etc/nginx/cert -v /achong:/root --link myphp-fpm:php -d nginx