centos 7 源碼方式安裝nginx(1.18.0) + ssl + 阿里證書配置


直接使用yum方式安裝的ngninx默認是不支持ssl的,所以需要從代碼編譯安裝

一、查看要安裝的版本

http://nginx.org/en/download.html
這里我們選擇的穩定版1.18.0

二、先安裝依賴

安裝依賴之前最好先執行下update

yum update

安裝相關依賴

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

三、下載源碼

切換到/usr/local/src目錄下,下載源代碼解壓

cd /usr/local/src
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar -zxvf nginx-1.18.0.tar.gz

四、編譯源代碼

切換目錄

cd /usr/local/src/nginx-1.18.0

編譯nginx,帶:ssl/gzip/realip等功能

./configure  --prefix=/usr/local/nginx \
  --with-threads \
  --with-http_realip_module \
  --with-http_stub_status_module \
  --with-http_gzip_static_module \
  --with-http_ssl_module

以下是configure參數說明:

  • --with-threads:啟用thread pool支持。
  • --with-http_realip_module:允許從請求報文頭中更改客戶端的ip地址,默認為關。
  • --with-http_stub_status_module:啟用ngx_http_stub_status_module 支持查看nginx的狀態頁。
  • --with-http_ssl_module:啟用ngx_http_gzip_static_module支持,支持在線實時壓縮輸出數據流。
  • --with-http_ssl_module:啟用https支持。

編譯成功后的截圖

編譯報錯的解決辦法,沒有報錯直接跳過

  1. 報錯:./configure: error: the HTTP rewrite module requires the PCRE library.
    問題原因:編譯安裝nginx需要pcre包,未安裝的話會報錯
    解決辦法:
    yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel

  2. 報錯:File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:
    問題原因:yum采用python作為命令解釋器,原來系統自帶的python解釋器為python2.7,系統默認的解釋器為python3.7
    解決辦法:
    vim /usr/bin/yum
    修改第一行為:#!/usr/bin/python2.7
    vi /usr/libexec/urlgrabber-ext-down
    修改第一行為:#!/usr/bin/python2.7

  3. 報錯:File "/bin/yum-config-manager", line 135 except yum.Errors.RepoError, e:
    問題原因:yum采用python作為命令解釋器,原來系統自帶的python解釋器為python2.7,系統默認的解釋器為python3.7
    解決辦法:
    vim /bin/yum-config-manager
    修改第一行為:#!/usr/bin/python2.7

  4. 報錯:./configure: error: SSL modules require the OpenSSL library.
    問題原因: 缺少SSL庫
    解決辦法:yum -y install openssl openssl-devel

五、初次安裝nginx

如果是第一次安裝或已卸載后安裝的話,用編譯+安裝指令:

make && make install

六、編譯更新nginx版本 (初次安裝跳過此步驟)

如果nginx已經安裝過,執行編譯指令:

make

make成功后查看下src下的版本信息,截圖帶--with-http_ssl_module說明就是帶ssl參數編譯的

/usr/local/src/nginx-1.18.0/objs/nginx -V


確認編譯后的版本無問題后,把上一步make編譯后的nginx文件,覆蓋指定原版本,輸入y確認覆蓋完就更新成功了!!

cp /usr/local/src/nginx-1.18.0/objs/nginx /usr/local/nginx/sbin/

七、查看nginx的版本信息

查看安裝or更新后的nginx版本,也可以直接nginx -V

/usr/local/nginx/sbin/nginx -V

八、配置開機自啟動

vim /lib/systemd/system/nginx.service

復制以下內容保存(按ESC后:wq保存退出)

[Unit]
Description=nginx service
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

設置開機自啟動

systemctl enable nginx

啟動、查看狀態、重啟nginx,指令3件套

systemctl start nginx
systemctl status nginx
systemctl restart nginx

也可以reboot重啟機器后再查看nginx狀態(驗證開機自啟動)

九、配置nginx環境變量

一般修改配置后用 nginx -s reload 重啟

nginx -s reload

出現以下提示是沒有配置環境變量

打開/etc/profile

vim /etc/profile

在最后一行 追加下面2行配置(ESC :wq 保存退出)

# nginx path
PATH=$PATH:/usr/local/nginx/sbin
export PATH

使配置生效后,就可以用nginx -s reload

source /etc/profile

十、默認的nginx配置模板

在nginx默認配置上有一些小調整。

user  nginx;                # nginx啟動用戶,默認值:nobody
worker_processes  auto;     # nginx進程數,一般設為CPU的核心數,默認值:1

error_log  logs/error.log;  # 錯誤日志存放路徑
#pid        logs/nginx.pid;

events { 
  worker_connections  1024;   # work進程打開的最大連接數
}

http {
    include       mime.types;               # 文件擴展與類型映射
    default_type  application/octet-stream; # 默認的文件類型,不需調整
    # 設置日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;      # 日志文件路徑
    sendfile        on;                     # 開啟高速傳輸模式,默認值:on
    tcp_nopush      on;                     # 減少網絡報文段的數量
    tcp_nodelay     on;                     # 作用於socket參數,on=關閉nagle緩存算法,允許小包發送
    keepalive_timeout  65;                  # 超時時間,單位秒

    client_max_body_size    10m;            # 文件大小限制,默認1m

    # gzip相關
    gzip on;                      # 是否開啟gzip
    gzip_buffers 32 4K;           # 緩沖(壓縮在內存中緩沖幾塊? 每塊多大?)
    gzip_comp_level 6;            # 推薦6壓縮級別(級別越高,壓的越小,越浪費CPU計算資源)
    gzip_min_length 1k;           # 開始壓縮的最小長度
    gzip_types text/plain application/javascript text/css application/xml text/xml;  # 對哪些類型的文件用壓縮 如txt,xml,html ,css
    gzip_disable "MSIE [1-6]\.";  # 配置禁用gzip條件,支持正則。此處表示ie6及以下不啟用gzip(因為ie低版本不支持)
    gzip_http_version 1.0;        # 開始壓縮的http協議版本開始壓縮的http協議版本
    gzip_vary on;                 # 是否傳輸gzip壓縮標志

    #自定義變量
    #set $serverip $server_addr;   # 獲取nginx內網ip
    
    # Load modular configuration files
    include conf/*.conf;

    # 默認配置
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        # eror_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   html;
        }
    }
    # todo...
}

十一、阿里雲SSL證書配置

把阿里雲申請的證書放到目錄 /data/cert 或者/usr/local/nginx/conf/cert (路徑自己指定)
注意:服務器安全組要開啟80/443端口

vi  /usr/local/nginx/conf/nginx.conf

增加配置,把下面的www.yuming.com改成自己的域名

    server {
        listen       80;
        server_name  www.yuming.com;
        return       301 https://$server_name$request_uri;
    }
    server {
        listen       443 ssl;   # nginx1.15之后用這個語法,老的語法是ssl on;
        server_name  wwww.yuming.com;
        ssl_certificate   /data/cert/www.yuming.com.pem;
        ssl_certificate_key  /data/cert/www.yuming.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_prefer_server_ciphers on;
        location / {
            client_max_body_size 12m;  # 設置請求頭大小
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-Ip $remote_addr;
            proxy_set_header X-NginX-Proxy true;
            proxy_pass http://localhost:8001;
            proxy_redirect off;
        }
    }

十二、騰訊雲SSL證書配置

基本和阿里雲差不多,在ssl_ciphers處有差異
注意:服務器安全組要開啟80/443端口,申請證書的二級域名要和綁定的域名一致,如下例:service,否則會有不安全的警告

    server {
        listen       80;
        server_name  service.yuming.com;
        return       301 https://$server_name$request_uri;
    }
    server {
        listen       443 ssl;  # nginx1.15之后用這個語法,老的語法是ssl on;
        server_name  service.yuming.com;
        ssl_certificate   /data/cert/1_service.yuming.com_bundle.crt;
        ssl_certificate_key  /data/cert/2_service.yuming.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;        
        ssl_prefer_server_ciphers on;
        location / {
            client_max_body_size 12m;  # 設置請求頭大小
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-Ip $remote_addr;
            proxy_set_header X-NginX-Proxy true;
            proxy_pass http://localhost:8081;
            proxy_redirect off;
        }
    }

十三、Nginx其他配置

1、配置靜態文件訪問,autoindex on可以設置為開啟索引,可自行設置

    server {
        listen       80;
        server_name  pic.yuming.com;
        location / {
          # 配置靜態目錄
          root /data/upimgs;
          autoindex off;              # on顯示資源目錄,off不顯示
          autoindex_exact_size off;   # on以bytes顯示大小,off以KB、MB、GB顯示文件大小
          autoindex_format html;      # 以html的方式進行格式化,可選參數有 html | json | xml
          autoindex_localtime off;    # 顯示的⽂件時間為⽂件的服務器時間。默認為off,顯示的⽂件時間為GMT時間
        }
    }

2、nginx限制ip訪問 + 反向代理

    server {
        listen       80;                    #監聽端口
        server_name  api.yuming.com;    #域名
        #自定義變量
        set $serverip $server_addr; # 服務器地址放在變量里,避免重復取

        #allow 61.18.22.155;        # 限制固定ip訪問
        #allow 61.18.22.0/24;       # 0/24意思是ip的前3段一致,值范圍[8,16,24]
        #deny all;                  # 拒絕所有的
        
        location / {
          root /data/website/goapp/dist;    # 配置靜態目錄
          index index.html;                 # 配置默認首頁
          try_files $uri $uri/ /index.html; # 解決刷新問題
        }
        location /api {
          client_max_body_size 12m;                     #此處修改上傳文件大小限制
          proxy_pass http://127.0.0.1:8083;             #反向代理地址+端口

          proxy_set_header Host $http_host;             #設置Host
          proxy_set_header X-Real-Ip $remote_addr;      #設置客戶端遠程地址
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Server-Ip $serverip;       #設置服務器內網地址
          proxy_set_header X-NginX-Proxy true;		

          # 下面暫時沒啥用
          set_real_ip_from 0.0.0.0/0;		            #從哪個信任前代理處獲得真實用戶ip
          real_ip_header  X-Forwarded-For;   		    #接收到報文的哪個http首部去獲取前代理傳送的用戶ip
          real_ip_recursive   on;             		  #是否遞歸地排除直至得到用戶ip(默認為off)
        }
    }

nginx加websocket配置

      location /ws {
             proxy_http_version 1.1;
             proxy_pass http://localhost:8009;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection "upgrade";          
        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM