Nginx配置HTTPS

1、Nginx配置HTTP

在服務器端,用Nginx配置一個靜態文件很容易,只須要在nginx.conf文件中加上:html

server {
    listen ip:80;
    server_name XX.XX.com;
    server_name_in_redirect off;
    charset UTF-8;

    location / {
        root /data/apache_htdocs/apply/;
        index index.html index.htm;
        expires 1d;
    }
}

2、獲取HTTPS證書

1.生成密鑰key(server.key)

$ openssl genrsa -des3 -out server.key 2048

以上命令會生成一個server.key文件nginx

使用如下命令能夠跳過輸入密碼的步驟:apache

$ openssl rsa -in server.key -out server.key

2.建立服務器證書的申請文件(server.csr)

$ openssl req -new -key server.key -out server.csr

其中Country Name填CN,Common Name填主機名(https://XX.XX.com/...,這裏的主機名爲XX.XX.com),其餘均可不填。服務器

3.建立CA證書(ca.crt/ca.srl)

$ openssl req -new -x509 -key server.key -out ca.crt -days 3650

這個證書用來給本身的服務器證書籤名session

4.建立服務器證書(server.crt)

$ openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt

通過以上步驟,一共生成了5個文件:app

ca.crt ca.srl server.crt server.csr server.key

其中server.crt和server.key就是Nginx須要的證書文件tcp

3、配置Nginx

Nignx配置文件nginx.conf中加入:ui

server {
    listen       ip:443 ssl;
    server_name  XX.XX.com;

    ssl_certificate      /data/XX/keys/server.crt;
    ssl_certificate_key  /data/XX/keys/server.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        root   /data/apache_htdocs/admin/;
        index  index.html index.htm;
        expires 1d;
    }
}

配置好以後運行 nginx -t 檢查配置是否有語法錯誤spa

沒問題的話運行 nginx -s reload 從新加載配置文件code

運行 netstat -lntp 能夠查看新增了一個443端口的nginx服務:

tcp        0      0 ip:443            0.0.0.0:*                   LISTEN      pid/nginx

 4、遇到的問題及解決方案

1.問題一:缺乏ngx_http_ssl_module模塊

nginx -t 時報錯以下:

nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module

解決方案:

利用Nginx源碼編譯一個帶ngx_http_ssl_module模塊的nginx,替換掉現有的nginx,具體步驟以下

(1)查看如今的nginx編譯參數

$ /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.8.0
built by gcc 4.4.6 20110731 (Red Hat 4.4.6-4) (GCC)
built with OpenSSL 1.0.1m 19 Mar 2015
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-pcre=/usr/local/pcre-8.10

(2)利用源碼從新編譯nginx

$ cd /usr/local/nginx-1.8.0
$ ./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/pcre-8.10 --with-http_ssl_module

其中--with-http_ssl_module是新加的參數

配置完運行make進行編譯,注意不須要運行make install命令

(3)將新編譯生成的nginx替換現有的nginx

覆蓋以前先備份現有的nginx:

$ cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

中止nginx服務:

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

替換現有的nginx:

$ cp ./objs/nginx /usr/local/nginx/sbin/

啓動nginx:

$ /usr/local/nginx/sbin/nginx

 

2.問題二:缺乏OPENSSL或PCRE模塊

./configure或make Nginx時報錯:

./configure: error: the HTTP rewrite module requires the PCRE library.

解決方案:

源碼安裝openssl和pcre

源碼下載地址

openssl: https://www.openssl.org/(直接下載:https://www.openssl.org/source/openssl-1.1.1.tar.gz)

pcre: https://www.pcre.org/(直接下載:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/)

源碼安裝:

(1)解壓

$ tar zxvf pcre-8.42.tar.gz
$ cd pcre-8.42

(2)配置

$ ./configure --prefix=/usr/local/pcre

(3)編譯

$ make

(4)安裝

$ make install

編譯和安裝能夠合成一步:make && make install

openssl的安裝同理

相關文章
相關標籤/搜索