[心得] 把伺服器的Apache更換成Nginx

前言:

終於要告別Apache了,打從念資訊科系就接觸的Apache超過20年了...
本來還想打一堆廢話撐版面...還是算了...對Apache的緬懷下略500字

在上一篇 [心得] CentOS 6.10 安裝 PHP7.3 MariaDB Nginx WordPress (LEMP環境)
已經在測試機上複製跟伺服器相同環境,運作上也正常
所以這篇就是把伺服器的Apache 換成 Nginx 並且讓網站SSL設定也正常
Apache 跟Nginx 是可以同時存在的(不能同時占用相同埠號 如port:80)
所以在更改 Nginx 的設定檔的過程中,如果無法正常使用,是可以立即切回去原本正常運作的Apache的

內容補正

原本伺服器把Apache改成Nginx上線後,網址列的SSL鎖頭可以正常顯示
以為這次沒碰到什麼坑...沒想到當我要把這篇初稿的內容轉貼到臉書上時
碰到坑了...就知道沒那順利...

之前把WordPress的連結轉貼到臉書上,都會顯示縮圖跟文章的標題
這次要轉貼,發現有異常,圖跟標題無法顯示,只有網址列
正常的貼文會如下圖:(不正常的還沒抓...坑就填好了)

圖1

Q:怎樣發現是SSL憑證的坑?
A:使用 Facebook Debuger

雖然網址列的SSL鎖頭是正常顯示,但在臉書轉貼WordPress文章卻無法正常顯示文章縮圖跟標題,使用臉書除錯工具後才發現是SSL憑證不完整

填坑的過程就不加以細述,直接說重點
原本以為在Apache用的憑證可以直接拿來給Nginx用
事實上我也這樣做了,原本以為是偷吃步...結果碰到坑
也許真的可以這樣做,但要花時間找資料填坑...

最簡單的方式用 certbot.eff.org 直接重新跑一次流程,不用3分鐘就解決了。

上次用的時候是兩年前,沒想到這次用這隻程式更進步了,直接自動修改設定檔...目前伺服器已經是用Nginx + Let's Encrypt SSL

以下就直接貼上我目前的Nginx設定檔
nano /etc/nginx/conf.d/default.conf

#
# The default server
#
server {
    listen       80;
    server_name  smilehsu.cc;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    # SSL設定
    ssl on;
    listen 443;
    ssl_certificate /etc/letsencrypt/live/smilehsu.cc-0001/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/smilehsu.cc-0001/privkey.pem; # managed by Certbot

    #include /etc/letsencrypt/options-ssl-nginx.conf;

    location / {
        root   /var/www/html/wordpress;
        index index.php  index.html index.htm;
        try_files $uri $uri/ /index.php?$args; 
    }

    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /var/www/html/wordpress;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}

}

唯一要注意的是一個小地方

location / {
        root   /var/www/html/wordpress;
        index index.php  index.html index.htm;
        try_files $uri $uri/ /index.php?$args;
    }

其中的
try_files $uri $uri/ /index.php?$args;
加這一行的用意是,如果WordPress是使用自訂網址的話
那麼只能看的到首頁 跟後台的畫面,其他的都會顯示錯誤

圖1

設定檔存檔後

service nginx start
service php-fpm start

chkconfig nginx on
chkconfig php-fpm on
chconfing httpd off

Reference: