1. 程式人生 > >Centos7 nginx 搭建https服務器

Centos7 nginx 搭建https服務器

echo sbin cert href scrip rest -- blog 建議

Nginx簡介

Nginx (engine x) 是一個高性能的HTTP和反向代理服務,也是一個IMAP/POP3/SMTP服務。Nginx是由伊戈爾·賽索耶夫為俄羅斯訪問量第二的Rambler.ru站點(俄文:Рамблер)開發的,第一個公開版本0.1.0發布於2004年10月4日。其將源代碼以類BSD許可證的形式發布,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。2011年6月1日,nginx 1.0.4發布。

Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。其特點是占有內存少,並發能力強,事實上nginx的並發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。

實驗環境:

系統版本:centos7x3.10.0-514.el7.x86_64

Nginx版本:nginx1.14.0

關閉防火墻並禁止開機自啟

systemctl stop firewalld.service
systemctl disable firewalld

關閉selinux

sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g‘ /etc/sysconfig/selinux

修改主機名

vi /etc/hostname

nginx.wangfeiyu.com

域名綁定IP

vi /etc/hosts

技術分享圖片

重啟 reboot

安裝nginx服務

1、安裝nginx依賴環境包

yum install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

2、官網下載nginx1.14.0壓縮包

wget https://nginx.org/download/nginx-1.14.0.tar.gz

3、解壓nginx

tar zxf nginx-1.14.0.tar.gz

4、進入解壓目錄

cd nginx-1.14.0

5、編譯nginx

1)默認編譯方式

. /configure

2)自定義編譯選項

. /configure \
--user=nginx \
--group=nginx \
--prefix=/usr/local/nginx \

--conf-path=/usr/local/nginx/conf/nginx.conf \
--pid-path=/usr/local/nginx/conf/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
--with-http_ssl_module
註:以上為默認編譯方式和具體指定的編譯方式,任選以上這兩種之一即可。--with-http_ssl_module這個選項是https的重要模塊必須安裝。

3)本文中使用的編譯安裝方式

./configure
--prefix=/usr/local/nginx
--with-http_stub_status_module
--with-http_ssl_module
技術分享圖片
註:以上--with-http_ssl_module這個模塊是https的關鍵,必須安裝!

6、安裝nginx

make && make install

7、啟動nginx

方式一

1)啟動nginx

/usr/local/nginx/sbin/nginx
技術分享圖片

2)關閉nginx

/usr/local/nginx/sbin/nginx -s stop

3)重啟nginx

/usr/local/nginx/sbin/nginx -s reload

註:如果嫌以上方式太麻煩,可以做軟連接ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx或者在全局環境變量裏增加nginx環境變量,然後直接使用nginx即可!

方式二

1)編輯nginx服務啟動文件

vi /etc/init.d/nginx

#! /bin/bash
#chkconfig: - 85 15
PATH=/usr/local/nginx
NAME=nginx
DAEMON=$PATH/sbin/$NAME
CONFIGFILE=$PATH/conf/$NAME.conf
PIDFILE=$PATH/logs/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
set -e
[ -x "$DAEMON" ] || exit 0
do_start() {
$DAEMON -c $CONFIGFILE || echo -e "\033[32m nginx already running \033[0m"
}
do_stop() {
$DAEMON -s stop || echo -e "\033[31m nginx not running \033[0m"
}
do_reload() {
$DAEMON -s reload || echo -e "\033[31m nginx can‘t reload \033[0m"
}
case "$1" in
start)
echo -e "\033[32m $NAME running \033[0m"
do_start
;;
stop)
echo -e "\033[31m $NAME stoping \033[0m"
do_stop
;;
reload|graceful)
echo -e "\033[32m $NAME configuration...\033[0m"
do_reload
;;
restart)
echo -e "\033[32m Restarting : $NAME \033[0m"
do_stop
do_start
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2
exit 3
;;
esac
exit 0

註:切記編輯完啟動腳本以後一定要給予執行權限,不然啟動無效!

2)設置啟動文件執行權限

chmod +x /etc/init.d/nginx

3)啟動nginx

//設置開機自啟

chkconfig nginx on

//啟動nginx

/etc/init.d/nginx start

//重啟nginx

/etc/init.d/nginx restart

//查看nginx服務啟動狀態

chkconfig --list

//查看nginx服務是否開啟

netstat -antupl | grep nginx

8、開機啟動nginx

1)編輯開機啟動文件

vi /etc/rc.local

添加一行/usr/local/nginx/sbin/nginx

2)設置啟動文件權限

chmod 755 /etc/rc.local

註:如果使用方式二腳本啟動服務,那麽以上啟動方式可以省略!

9、訪問測試

訪問地址:http://192.168.152.77
技術分享圖片

升級nginx為https條件

1、查看nginx是否支持ssl

/usr/local/nginx/sbin/nginx -V
技術分享圖片

註:查看 configure arguments 信息中是否包含 -with-http_ssl_module 字樣,如果沒有則需要重新編譯。找到之前安裝 Nginx 時的編譯目錄,配置ssl模塊,因為這次是升級nginx,所以不需要執行 make install,執行命令如下:
. /configure --with-http_ssl_module
make

2、查看openssl配置文件

vi /etc/pki/tls/openssl.cnf
技術分享圖片

註:以上截圖默認就是這樣的重要參數配置路徑,如果你要配置修改路徑,那麽切記在後邊簽證書等等的操作都要按照這個配置路徑去創建,不然當認證的時候會找不到證書!

3、創建生成證書需要的文件

1)創建證書索引數據庫文件

touch /etc/pki/CA/index.txt

2) 指定第一個頒發證書的序列號

echo 01 > /etc/pki/CA/serial

註:必須是兩位十六進制數,99之後是9A!

4、CA自簽證書

1)生成CA私鑰

cd /etc/pki/CA

umask 066

openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048
技術分享圖片

註:進入到/etc/pki/CA/目錄下執行這兩條命令!

2) 生成CA自簽名證書

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
技術分享圖片

註釋:
-new: 生成新證書簽署請求
-x509: 專用於 CA 生成自簽證書
-key: 生成請求時用到的私鑰文件
-days n:證書的有效期限
-out: 證書的保存路徑
提示輸入國家,省,市,公司名稱,部門名稱,CA主機名(頒發者名稱)

4)查看生成的自簽名證書

//linux系統下查看

openssl x509 -in /etc/pki/CA/cacert.pem -noout -text

//windows系統下查看

需要更改上述文件名後綴為.cer即可查看

5、頒發證書

1)在當前創建/root/key/目錄

mkdir key

2)生成web服務器私鑰

cd key/

umask 066

openssl genrsa -out key/service.key 2048
技術分享圖片

3) 生成CA證書申請文件

openssl req -new -key service.key -out service.csr
技術分享圖片

註:同樣提示輸入國家、省、市、公司等信息。切記:國家,省,公司名稱三項必須和CA一致。主機名稱必須和網站域名相同,如www.centos73.com。或者使用泛域名,即*.centos73.com,匹配所有。

4) 將證書文件移動到CA服務器/etc/pki/CA/csr目錄下

mv service.csr /etc/pki/CA/csr/
技術分享圖片

註:默認好像是沒有這個csr目錄,那麽就手動創建一個!

5) CA簽署證書,並將證書頒發給請求者

openssl ca -in /etc/pki/CA/crl/service.csr -out /etc/pki/CA/certs/service.crt -days 365
技術分享圖片

6)查看證書中的信息

//查看自簽證書

openssl x509 -in 絕對路徑 -noout –text | issuer | subject | serial | dates
技術分享圖片
技術分享圖片

//查看頒發證書的序列號

cat /etc/pki/CA/serial
技術分享圖片

//查看指定編號的證書狀態

openssl ca -status 1
技術分享圖片
註:這個編號是頒發的第幾個證書,當前就一個所以是1!

//查看證書詳細信息

cat /etc/pki/CA/index.txt
技術分享圖片
註:開頭V表示當前證書的狀態正常!

//查看subjects信息
技術分享圖片
註:yes表示subjects信息必須是唯一的,不能重復申請!

6、修改nginx配置文件

vi /usr/local/nginx/conf/nginx.conf
技術分享圖片

註:這裏有一個坑就是默認的HTTPS SERVER這行必須刪除,要不然一直報錯!

7、重啟nginx服務

/etc/init.d/nginx restart

8、測試(建議使用Firefox瀏覽器測試)

訪問網頁測試

1)域名訪問地址:https://nginx.wangfeiyu.com/

技術分享圖片
註:以上截圖訪問方式使用的是https加密訪問但是需要我們將證書導入瀏覽器才行!
導入方式:
//點擊高級
技術分享圖片

//點擊添加列外
技術分享圖片

//點擊確認安全列外
技術分享圖片
技術分享圖片

註:以上截圖已經可以訪問到網頁,說明nginx加密成功或者證書導入成功!其他的瀏覽器導入證書方式不一樣,但是超級簡單,自行百度即可!

2)IP訪問地址:http://192.168.152.177/

技術分享圖片

註:這種方式默認使用的還是http協議!也可以設置為通過http跳轉到https!

3)IP地址https訪問:https://192.168.152.177/

技術分享圖片

註:以上截圖訪問方式使用的是https加密訪問但是需要我們將證書導入瀏覽器才行!導入方式以上面方式相同。

Centos7 nginx 搭建https服務器