docker安裝nginx並配置nginx.conf

拉取nginx鏡像 html

docker pull nignx

查看虛擬機內鏡像nginx

啓動nginx看看是否成功docker

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

啓動後打開瀏覽器訪問一下,確認是否可用瀏覽器

接下來我想修改 nginx.conf 配置文件,咱們須要把咱們本身定義的 nginx.conf掛載在 docker 中的nginxbash

首先建立掛載目錄測試

mkdir -p /usr/dokcer_nginx_data/{conf,conf.d,html,log}

自定義 nginx.conf 文件3d

server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
              proxy_pass http://39.98.173.195:8080/;
              index  dashboard index;
              proxy_set_header Host       $http_host;
              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_pass 不能設置爲 127.0.0.1,須要設置爲公網IP,不然nginx沒法識別,目前不知是什麼緣由,我猜測是docker沒法識別127.0.0.1吧代理

文件建立成功後,上傳到 /usr/dokcer_nginx_data/conf 目錄下日誌

如今來經過docker從新啓動nginxcode

docker run --name nginx -d -p 80:80  -v /usr/dokcer_nginx_data/conf/nginx.conf:/etc/nginx/nginx.conf  -v /usr/dokcer_nginx_data/log:/var/log/nginx  -v /usr/dokcer_nginx_data/html:/usr/share/nginx/html nginx

第一個-v:掛載nginx的主配置文件,以方便在宿主機上直接修改容器的配置文件

第二個-v:掛載容器內nginx的日誌,容器運行起來以後,能夠直接在宿主機的這個目錄中查看nginx日誌

第三個-v:掛載靜態頁面目錄

 

nginx反向代理非80端口的問題

以上是代理一個80端口,咱們再來反向代理其餘端口,例如9090

 

修改 nginx.conf

server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
              proxy_pass http://39.98.173.195:8080/;
              index  dashboard index;
              proxy_set_header Host       $http_host;
              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;
	    } 
}


 server {
        listen       9090;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
              proxy_pass http://39.98.173.195:8080/;
              index  dashboard index;
              proxy_set_header Host       $http_host;
              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;
	    } 
}

 

爲了讓配置文件生效,從新啓動nginx或者刪除nginx容器從新建立

測試發現 

 http://39.98.173.195:8080/docker/findUser 能夠訪問

 http://39.98.173.195:80/docker/findUser 能夠訪問

http://39.98.173.195:9090/docker/findUser 沒法訪問

爲何最後一個會沒法訪問? 緣由未知,可是我找到了解決辦法

再啓動一個nginx容器,注意端口映射

docker run --name nginx1 -d -p 9090:9090  -v /usr/dokcer_nginx_data/conf/nginx.conf:/etc/nginx/nginx.conf  -v /usr/dokcer_nginx_data/log:/var/log/nginx  -v /usr/dokcer_nginx_data/html:/usr/share/nginx/html nginx

 

部署靜態網頁

把 html 文件放在 /usr/dokcer_nginx_data/html 文件夾下,稍後映射到 nginx 容器中

更新 nginx.conf

server {
         listen       8088;
         server_name  localhost;

         location / {
             root   /usr/share/nginx/html/;
             index  index.html index.htm;
         }
     }

啓動一個新的 nginx 

docker run --name nginx1 -d -p 8088:8088 -v /usr/dokcer_nginx_data/conf/nginx.conf:/etc/nginx/nginx.conf  -v /usr/dokcer_nginx_data/log:/var/log/nginx  -v /usr/dokcer_nginx_data/html:/usr/share/nginx/html  nginx

打開瀏覽器訪問便可

注意:有的人會遇到監聽 80  端口訪問 html 時候,報錯 404 ,確認配置文件無誤後,緣由是:

Nginx的docker容器中,有一個默認配置文件 /etc/nginx/nginx.conf 。還有一個默認放配置文件的目錄 /etc/nginx/conf.d。nginx 會加載目錄conf.d 下的 *.conf 文件。若是這些 .conf 文件的內容和 /etc/nginx/nginx.conf 文件有衝突,那麼nginx會默認用 conf.d 目錄下的文件配置去覆蓋 nginx.conf 文件裏面的配置。nginx 容器的 conf.d 目錄下有個 default.conf 配置文件。
 

首先 進入容器

docker exec -it  容器ID /bin/bash

刪除該文件,從新啓動便可

rm default.conf
相關文章
相關標籤/搜索