春節前,我看到 nginx
加入了 http/2 的 server push 功能,就很想試一下。
正好這些天,我在學習 docker,就想到可以用
nginx 容器。萬一**改亂了,直接刪掉,再重啟乙個容器就可以了。
下面就是我搭建 nginx 容器的過程,以及如何加入 ssl 證書。你會看到 docker 用來測試軟體的新功能,真的很方便,很值得學習。如果你還不會 docker,可以先看《
docker 入門教程》,非常簡單,半小時以內就能學會。
nginx 的最大作用,就是搭建乙個 web server。有了容器,只要一行命令,伺服器就架設好了,完全不用配置。
$ docker container run \nginx image,預設是最新版本(latest),當前是 1.13.9。如果本機安裝過以前的版本,請刪掉重新安裝,因為只有 1.13.9 才開始支援 server push。-d \
-p 127.0.0.2:8080:80 \
--rm \
--name mynginx \
nginx
上面命令的各個引數含義如下。
如果沒有報錯,就可以開啟瀏覽器訪問 127.0.0.2:8080 了。正常情況下,顯示 nginx 的歡迎頁。
然後,把這個容器終止,由於--rm引數的作用,容器檔案會自動刪除。
$ docker container stop mynginx網頁檔案都在容器裡,沒法直接修改,顯然很不方便。下一步就是讓網頁檔案所在的目錄/usr/share/nginx/html對映到本地。
首先,新建乙個目錄,並進入該目錄。
$ mkdir nginx-docker-demo然後,新建乙個html子目錄。$ cd nginx-docker-demo
$ mkdir html在這個子目錄裡面,放置乙個index.html檔案,內容如下。 接著,就可以把這個子目錄html,對映到容器的網頁檔案目錄/usr/share/nginx/html。
$ docker container run \開啟瀏覽器,訪問 127.0.0.2:8080,應該就能看到 hello world 了。-d \
-p 127.0.0.2:8080:80 \
--rm \
--name mynginx \
--volume "$pwd/html":/usr/share/nginx/html \
nginx
修改網頁檔案還不夠,還要修改 nginx 的配置檔案,否則後面沒法加 ssl 支援。
首先,把容器裡面的 nginx 配置檔案拷貝到本地。
$ docker container cp mynginx:/etc/nginx .上面命令的含義是,把mynginx容器的/etc/nginx拷貝到當前目錄。不要漏掉最後那個點。
執行完成後,當前目錄應該多出乙個nginx子目錄。然後,把這個子目錄改名為conf。
$ mv nginx conf現在可以把容器終止了。
$ docker container stop mynginx重新啟動乙個新的容器,這次不僅對映網頁目錄,還要對映配置目錄。
$ docker container run \上面**中,--volume "$pwd/conf":/etc/nginx表示把容器的配置目錄/etc/nginx,對映到本地的conf子目錄。--rm \
--name mynginx \
--volume "$pwd/html":/usr/share/nginx/html \
--volume "$pwd/conf":/etc/nginx \
-p 127.0.0.2:8080:80 \
-d \
nginx
瀏覽器訪問 127.0.0.2:8080,如果能夠看到網頁,就說明本地的配置生效了。這時,可以把這個容器終止。
$ docker container stop mynginx現在要為容器加入 https 支援,第一件事就是生成私鑰和證書。正式的證書需要證書當局(ca)的簽名,這裡是為了測試,搞一張自簽名(self-signed)證書就可以了。
下面,我參考的是
digitalocean 的教程。首先,確定你的機器安裝了
openssl,然後執行下面的命令。
$ sudo openssl req \上面命令的各個引數含義如下。-x509 \
-nodes \
-days 365 \
-newkey rsa:2048 \
-keyout example.key \
-out example.crt
執行後,命令行會跳出一堆問題要你回答,比如你在哪個國家、你的 email 等等。
其中最重要的乙個問題是 common name,正常情況下應該填入乙個網域名稱,這裡可以填 127.0.0.2。
common name (e.g. server fqdn or your name) :127.0.0.2回答完問題,當前目錄應該會多出兩個檔案:example.key和example.crt。
conf目錄下新建乙個子目錄certs,把這兩個檔案放入這個子目錄。
$ mkdir conf/certs有了私鑰和證書,就可以開啟 nginx 的 https 了。$ mv example.crt example.key conf/certs
首先,開啟conf/conf.d/default.conf檔案,在結尾新增下面的配置。
server然後,啟動乙個新的 nginx 容器。}
$ docker container run \上面命令中,不僅映**容器的80埠,還映**443埠,這是 https 的專用埠。--rm \
--name mynginx \
--volume "$pwd/html":/usr/share/nginx/html \
--volume "$pwd/conf":/etc/nginx \
-p 127.0.0.2:8080:80 \
-p 127.0.0.2:8081:443 \
-d \
nginx
開啟瀏覽器,訪問
。因為使用了自簽名證書,瀏覽器會提示不安全。不要去管它,選擇繼續訪問,應該就可以看到 hello world 了。
Nginx 容器教程
春節前,我看到 nginx 加入了 http 2 的 server push 功能,就很想試一下。正好這些天,我在學習 docker,就想到可以用 nginx 容器。萬一 改亂了,直接刪掉,再重啟乙個容器就可以了。下面就是我搭建 nginx 容器的過程,以及如何加入 ssl 證書。你會看到 dock...
Nginx 容器教程
nginx 加入了 http 2 的 server push 功能,學習 docker,就可以用 nginx 容器。萬一 改亂了,直接刪掉,再重啟乙個容器就可以了。下面就是我搭建 nginx 容器的過程,以及如何加入 ssl 證書。你會看到 docker 用來測試軟體的新功能,真的很方便,很值得學習...
nginx教程(二) nginx安裝教程
目錄 在開始之前 首先,安裝下編譯環境和安裝編譯原始碼所需要的工具和庫,執行命令 yum install gcc gcc c ncurses devel perl 否則,安裝安裝編譯時會報如下錯誤 建立目錄 mk usr local software package 然後進入 cd usr loca...