Contents

Nginx访问服务器静态资源

最近想使用闲置服务器作为一个仓库来访问其中的静态资源,同时学习服务器相关知识,方便之后配置docker和nginx遂有此记录

什么是docker

Docker是一种基于Go语言实现的开源容器项目,目标是达到项目运行环境“一次封装,到处运行”的目的。

什么是nginx

Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其占有内存少,并发能力强,在BSD-like 协议下发行。

linux安装docker

我的服务器是 ubuntu-18.04-amd64

1 .检查卸载老版本docker

sudo apt-get remove docker docker-engine http://docker.io containerd runc

2 .更新ubuntu的apt源索引

sudo apt-get update

3 .允许apt通过HTTPS使用仓库安装依赖

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

4 .添加GPG密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

5 .加入官方仓库

echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

6 .安装docker

sudo apt-get install docker-ce docker-ce-cli containerd.io

7 查看是否安装成功

sudo docker run hello-world

8 .docker卸载

sudo apt-get purge docker-ce docker-ce-cli containerd.io

docker安装及配置nginx

因为需要访问服务器的静态资源,所以最好将nginx容器内的配置文件等一些相关目录和宿主机相关联,将宿主机的目录映射到nginx容器里

1 .安装nginx镜像

docker pull nginx

2 .启动nginx

docker run --name nginx -p 80:80 -d nginx

3 .创建宿主机nginx配置文件地址

mkdir -p home/nginx/conf.d/ 
& mkdir -p home/nginx/conf/ 
& mkdir -p home/nginx/html/
& mkdir -p home/nginx/logs/
& mkdir -p mnt/data/
  • -p 参数来创建多级文件夹

4 .查看nginx容器id

docker ps -a

4 .将nginx容器中的相关配置文件拷贝到宿主机

docker cp 容器id:/etc/nginx/nginx.conf /home/nginx/conf/
docker cp 容器id:/etc/nginx/conf.d/default.conf /home/nginx/conf.d/
docker cp 容器id:/usr/share/nginx/html /home/nginx/html/
docker cp 容器id:/var/log/nginx /home/nginx/logs/

5 .停止容器运行并删除容器

docker stop 容器id
docker rm 容器id

6 .重新创建启动nginx容器并将容器配置文件挂载到宿主机

docker run --name nginx3344 -d -p 3344:80
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf 
-v /mnt/data:/mnt/data 
-v /home/nginx/logs:/var/log/nginx 
-v /home/nginx/html:/usr/share/nginx/html 
-v /home/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf 
nginx
  • –name nginx3344:为新创建的Docker容器指定一个名字,这个名字是“nginx3344
  • -d:在后台运行容器。
  • -p 3344:80:将宿主机的3344端口映射到容器的80端口。这样,访问宿主机的3344端口就会自动转到容器的80端口。
  • -v 将宿主机的路径挂载到容器的同一路径。
  • nginx:这是要运行的Docker镜像的名称,它表示要运行的容器是用这个镜像创建的。

静态资源访问配置

server {
    listen       80;
#    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;


    location / {
    	  add_header Access-Control-Allow-Origin *;
        alias   /mnt/data/;
        autoindex on;
    }
    
#    location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|ico|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
#	   root /mnt/data;
#    }

    #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$ {
#       root           html;
#       fastcgi_pass   127.0.0.1:9000;
#       fastcgi_index  index.php;
#       fastcgi_param  SCRIPT_FILENAME  /scripts$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;
#   }
}
location / {
    	  add_header Access-Control-Allow-Origin *;
        alias   /mnt/data/;
        autoindex on;
    }
  • add_header Access-Control-Allow-Origin * 它用于在HTTP响应头中添加一个名为Access-Control-Allow-Origin的头部。星号(*)表示这个头部将允许任何来源的网页进行访问,这是CORS(跨源资源共享)策略的一部分,用于处理跨域请求。
  • alias 用于将服务器上的某个路径映射到另一个路径。在这里,它将服务器上的/mnt/data路径映射为网站的根目录
  • autoindex 它用于启用目录列表。如果请求的URL是一个目录且没有特定的处理指令,Nginx会自动返回该目录下的文件列表。

至此结束