摘要:這個文檔,騰訊云的官網(wǎng)寫的比較詳細,可自行參考。騰訊云提供了免費的證書,雖然級別不高,不過對普通人絕對夠了,這點要給肥鵝個贊。
前言
公司業(yè)務擴展需要大力提高微信用戶的關注度,但是主服務器都在境外,國內客戶訪問速度成為了最大的障礙。先后試驗過CloudFlare跟騰訊DNS加速,但是都無法逾越我們的萬里長城萬里長。所以決定將服務區(qū)塊整體遷移,將國際跟國內業(yè)務分開。在對比了騰訊跟阿里兩朵云彩之后,決定牽手小肥鵝。老板問為啥用肥鵝?“便宜!” 我撇下兩個字跟一個大大的驚嘆號絕塵而去,留下老板一人在風中感激涕零......
系統(tǒng)配置服務器的配置需要根據(jù)的不同的需求做不同的改動,云服務器的好處是比較靈活,可以根據(jù)后續(xù)發(fā)展做適當調整。根據(jù)我們公司的業(yè)務模式我選擇了如下的配置:
基礎配置:8核CPU 16G內存
系統(tǒng)硬盤:200G SSD云硬盤
數(shù)據(jù)硬盤:100G SSD云硬盤
操作系統(tǒng):Ubuntu 16.04
對于系統(tǒng),在CentOS跟Ubuntu之間我做了一個選擇:Ubuntu. 這里做個簡單的說明,很多人說用CentOS好因為支持周期長,而且優(yōu)化效果更好。但是從公司運營成本角度講,Ubuntu上的套件數(shù)量豐富,更新快,安裝簡單,部署速度快。基本上起一個服務器也就不到半個小時,多臺的話可以自己做映射,然后修改dns路由器直接切換到新服務器上了。對于迭代頻繁的項目來說還是非常適合的。
有點跑偏了,言歸正傳,老司機開車了,大家一起飛起來:
SSH配置任何一個云都提供了SSH登陸模式,有的人喜歡給每個SSH登陸配一個專屬的公鑰,我個人的習慣是用我本身Mac電腦的公鑰去匹配相關SSH登陸,這因人而異。其次,處于安全考慮騰訊云給Ubuntu系統(tǒng)自動配置一個用戶ubuntu,這個用戶不是root用戶,這個要注意一下。 具體的Linux登陸實例網(wǎng)上有很多,我就不在這里的嘚啵了,給個官網(wǎng)鏈接:
鏈接描述
如我前文提到的,Ubuntu已經(jīng)套好了很多軟件,安裝Nginx也是簡單到非常,只要執(zhí)行下列命令即可安裝:
$ sudo apt-get update // 先升級apt管理包!先升級apt管理包!先升級apt管理包! $ sudo apt-get install nginx // 再安裝Nginx // 注意,從Ubuntu 16.04開始 Nginx已經(jīng)實現(xiàn)自動配置,裝完即可運行.防火墻
然后檢查一下Ubuntu自帶的防火墻管理工具UFW是否為開啟狀態(tài):
$ sudo ufw status
如果是第一次安裝,通常的輸出結果為:
Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere
如果你在上面的輸出沒看到Nginx字樣,請執(zhí)行下面命令:
$ sudo ufw allow "Nginx HTTP" // 允許接受Nginx的HTTP請求
然后你可以檢測UFW的支持列表:
$ sudo ufw app list // 可重復上面的命令吧Nginx的HTTPS協(xié)議也安裝好
關于UFW,可以自行查閱相關文檔,使用很簡單,可以通過它控制你的網(wǎng)站鏈接,屏蔽IP地址,數(shù)據(jù)庫鏈接,郵件端口...
最后,讓我們檢查一下Nginx的安裝情況吧:
$ systemctl status nginx
如果安裝順利,輸出結果會有Active: active (running) 字樣.
測試現(xiàn)在我們可以看看服務器訪問是否順利,首先是得到當前服務器IP地址:
$ ip addr show eth0 | grep inet | awk "{ print $2; }" | sed "s//.*$//"
上面命令會返回幾行結果,其中包括你的服務器的外網(wǎng)IP地址,然后你可以通過:http://外網(wǎng)IP地址來訪問你的服務器,如果一切順利,你就會看到久違的畫面:
知識點?關于Ngixn常用的文件以及目錄:
/etc/nginx 這個是存放所有Nginx相關的配置文件的目錄。
/etc/nginx/nginx.conf 這個是Nginx的全局默認配置文件,不建議修改如果你不清楚的話。
/etc/nginx/sites-available/ 這個目錄可以理解為你所有網(wǎng)站的配置文件目錄,但是并不是所有的網(wǎng)站都發(fā)布了。
/etc/nginx/sites-enabled/ 這個目錄是你所有發(fā)布的網(wǎng)站的配置文件目錄。是通過symbolic link連接起來了,所有網(wǎng)站都是已經(jīng)發(fā)布的網(wǎng)站。
/var/log/nginx/access.log Nginx的access日志
/var/log/nginx/error.log Nginx的錯誤日志
其他目錄及文件請參考:常用目錄手冊
?啟動和停止Nginx服務:
//方法一: $ sudo /etc/init.d/nginx start // 開啟 $ sudo /etc/init.d/nginx stop // 停止 $ sudo /etc/init.d/nginx restart // 重啟 //方法二: $ sudo systemctl start nginx // 開啟 $ sudo systemctl stop nginx // 停止 $ sudo systemctl restart nginx // 重啟
簡簡單單:
$ sudo apt-get install mysql-server mysql-client
然后會有個提示 Do you want to continue? [Y/n] 輸入 Y 即可。在快安裝完畢時,會跳出設置 root 密碼的界面。注意該root為數(shù)據(jù)庫的用戶,而非服務器賬戶, 別搞混了。
然后測試數(shù)據(jù)庫登陸是否正常:
$ mysql -u root –p // 輸入上一步設置的密碼
然后測試數(shù)據(jù)庫端口監(jiān)聽是否正常:
$ netstat -an | grep 3306
處于安全考慮,我個人不太推薦配置遠程訪問。所以有需要了解遠程設置的童鞋請自行解決,我不負責?
知識點?關于遠程設置,千萬別忘記修改/etc/mysql/my.cnf文件,把bind-address = 127.0.0.1開啟 。
?如果在后續(xù)開發(fā)過程中遇到了類似下面這個錯誤,
SELECT list is not in GROUP BY clause and contains nonaggregated column 錯誤
解決辦法:得修改/etc/mysql/mysql.cnf 文件,添加下面一行代碼
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
?啟動和停止MySql服務:
$ sudo /etc/init.d/mysql start $ sudo /etc/init.d/mysql stop $ sudo /etc/init.d/mysql restartPHP7配置 安裝
因為PHP7并不在Ubuntu 16.04的預備庫中,所以需要借用第三方倉庫安裝:
// 由于我裝的是7.1版本的PHP,所以僅以此為例,各位看官自行參考 $ sudo apt-add-repository ppa:ondrej/php $ sudo apt-get install php7.1 php7.1-fpm // 然后可執(zhí)行下面命令決定安裝那些php組件 $ sudo apt-cache search php7.1 // 我選擇的組件是: $ sudo apt-get install php7.1-cli php7.1-common php7.1-json php7.1-opcache php7.1-mysql php7.1-mbstring php7.1-mcrypt php7.1-zip php7.1-xml php7.1-gd php7.1-curl php7.1-soap php-mongodb php-uuid php-radius php-http php-memcached php-memcache php-mailparse php-sass php7.1-bcmath配置php.ini
經(jīng)過上面的幾個命令,PHP安裝成功后,接下來我們需要走一些基本配置。首先是要找到你的php.ini文件,捂臉吶喊在哪里是沒有用的,要用下面的命令來找:
// 查找php.ini文件。這里要注意很多網(wǎng)上的文章只給出默認的路徑但不是真正的執(zhí)行的路徑。 $ php --ini |grep Loaded // 然后打開php.ini $ vim /path_to_php_ini/php.ini
找到 cgi.fix_pathinfo=0 并且取消注釋并且設置值為0 這是一個很不安全的設置,因為它告訴PHP如果找不到請求的文件(比如:store.php),那么就試圖執(zhí)行最接近的文件(比如:stores.php)。問你怕沒??
控制php腳本能訪問的目錄。使用open_basedir選項能夠控制PHP腳本只能訪問指定的目錄,這樣能夠避免PHP腳本訪問不應該訪問的文件,一定程度上限制了phpshell的危害。
關閉危險函數(shù)。如果打開了安全模式,那么函數(shù)禁止是可以不需要的,但是我們?yōu)榱税踩€是考慮進去。disable_functions = system,passthru,exec,shell_exec,popen,phpinfo
關閉PHP版本信息。為了防止黑客通過telnet獲取服務器中php版本的信息,可以選擇關閉該信息斜路:expose_php = Off
防止SQL注入。設置magic_quotes_gpc = On將自動把用戶提交對sql的查詢進行轉換,比如把 " 轉為 "等,這對防止sql注射有重大作用。
錯誤信息控制。display_errors = Off將全部關閉錯誤信息顯示,如果必須要顯示建議控制錯誤顯示級別: error_reporting = E_WARNING & E_ERROR。 當然如果是開發(fā)環(huán)境另當別論。這里要特別注意一下,在Ubuntu系統(tǒng)里,如果需要顯示php錯誤,要修改pool.d文件:
$ sudo vim /etc/php/7.1/fpm/pool.d // 找到并修改catch_workers_output = yes 來顯示php錯誤
配置完后要記得重啟PHP.
PhpMyAdmin配置 安裝啥也不說了,開整:
$ sudo apt install phpmyadmin
注意 這里沒有Nginx的選項,所只需要點擊TAB按鍵,然后選擇OK,然后點擊回車鍵
下面這一步要選擇Yes:
下面這一步請輸入一個高強度密碼:
知識點這里提前說一下,在域名配置完成后,當你訪問你的phpMyAdmin(這里登陸是用到了之前設置的root用戶跟密碼)的時候你會看到很多系統(tǒng)的數(shù)據(jù)庫,如果你不想顯示這些系統(tǒng)信息可以通過修改數(shù)據(jù)庫配置文件隱藏相關數(shù)據(jù)庫。
phpMyAdmin的config文件在: /var/lib/phpmyadmi/config.inc.php 如果你沒有找到這個文件,那么你可以執(zhí)行下面的命令:
$ sudo mv /usr/share/phpmyadmin/config.sample.inc.php /var/lib/phpmyadmin/config.inc.php
然后你可以添加下面的code在該文件最后:
$cfg["Servers"][$i]["hide_db"] = "^(information_schema|performance_schema|mysql|phpmyadmin|sys)$"; // 你可以根據(jù)自己的需要選擇隱藏不同的數(shù)據(jù)庫
然后還要記得填寫一個加密鹽,不然會報錯。
$cfg["blowfish_secret"] = "寫入你自己的加密字串" ; /* 例如:bc9{8IdRoGm5Sdf(qt!s */騰訊云域名配置
各種云的域名解析界面做的都非常友好,很直接。在這里我就簡單說幾個知識點方便大家快速理解跟配置域名。
知識點?首先的首先,無論你的域名是否在其他地方備案成功,騰訊云都要求你在他們那里在備案一次,不然網(wǎng)站訪問不了。
?首先,如果你的域名是在騰訊云以外的商家買的,你要去到你的域名管理界面修改域名的DNS設置,指向騰訊云。
f1g1ns1.dnspod.net f1g1ns2.dnspod.net
這個文檔,騰訊云的官網(wǎng)寫的比較詳細,可自行參考。點擊這里產(chǎn)看手冊
?其次,假設你的域名是rocknroll.com,服務器外網(wǎng)IP為119.29.1.1。
如果你希望訪客可以通過: www.rocknroll.com訪問你的網(wǎng)站,設置為:
如果你希望訪客可以通過: rocknroll.com訪問你的網(wǎng)站,設置為:
如果你希望將某些地址指向CDN,比如說圖片地址,設置為:
如果你希望所有的子域名(*.rocknroll.com)都可以訪問,設置為:
都設置好后給騰訊云一些時間,然后你就可以ping你的網(wǎng)址,如果一切順利將會返回你的外網(wǎng)IP:
$ ping rocknroll.com // 你的外網(wǎng)IP會返回
其他關于的記錄CNAME、TXT、MX、AAAA、SRV等等可以參考官網(wǎng)手冊
HTTPS配置為什么需要HTTPS?因為26歲以上的程序猿、工程獅都覺得需要,你自己看著辦吧。
騰訊云提供了免費的SSL證書,雖然級別不高,不過對普通人絕對夠了,這點要給肥鵝個贊。
首先,打開SSL證書管理,然后點擊購買證書:
然后選擇域名型免費版(DV):
然后就填寫信息:
騰訊云基本上用不了20分鐘就會批準https申請,并且會發(fā)送一封郵件到上面指定的郵箱。 收到郵件后可以去下載編輯好的SSL文件。下載后,可以通過scp命令上傳到你的網(wǎng)站上,因為我們的服務器是Nginx,所以你要記得選擇打開Nginx文件夾。
知識點?上傳跟管理SSL證書:
$ scp /本地機目錄Nginx/1_domain_bundle.crt ssh ubuntu@119.29.1.1:/tmp $ scp /本地機目錄Nginx/2_domain_.key ssh ubuntu@119.29.1.1:/tmp // ubuntu 是騰訊云提供的用戶名 // 119.29.1.1 是你網(wǎng)站的外網(wǎng)ip // tmp文件夾是服務器文件夾可以不用修改權限直接上傳
然后要建立文件夾來管理你的SSL證書,我的習慣是在/etc/ssl/下面創(chuàng)建立相應的域名管理對應的SSL證書:
$ sudo mkdir cd /etc/ssl/domain.com $ sudo mv /tmp/1_domain_bundle.crt /etc/ssl/domain.com $ sudo mv /tmp/2_domain_.key /etc/ssl/domain.com完事具備 只欠東風破
前面安裝的各種組件都是為了這個最后的組合:建立Nginx網(wǎng)站對應文件:Server Block。在Nginx配置里面我介紹了2個特殊目錄:
/etc/nginx/sites-available/ 這個目錄可以理解為你所有網(wǎng)站的配置文件目錄,但是并不是所有的網(wǎng)站都發(fā)布了。
/etc/nginx/sites-enabled/ 這個目錄是你所有發(fā)布的網(wǎng)站的配置文件目錄。是通過symbolic
link連接起來了,所有網(wǎng)站都是已經(jīng)發(fā)布的網(wǎng)站。
這連個目錄就是Ngixn網(wǎng)站的核心配置文件。他們的關系是:sites-available是本體;sites-enabled是分身。初級的設置是:在你的服務器上每個網(wǎng)站擁有一個單一的配置文件并且存放到本體里面。然后根據(jù)需要可以開啟一個對應的分身去打,去浪,去碰撞。
// 主體目錄結構。我個人喜好用域名做為文件夾的名字,這個完全取決于個人。 etc/nginx/sites-available/ - rocknroll.com - me.rocknroll.com - phpmyadmin.rocknroll.com // 建立對應的分身: $ sudo ln -s /etc/nginx/sites-available/rocknroll.com /etc/nginx/sites-enabled/ $ sudo ln -s /etc/nginx/sites-available/me.rocknroll.com /etc/nginx/sites-enabled/ $ sudo ln -s /etc/nginx/sites-available/phpmyadmin.rocknroll.com /etc/nginx/sites-enabled/ // 分身目錄結構 etc/nginx/sites-enabled/ - rocknroll.com - me.rocknroll.com - phpmyadmin.rocknroll.com
網(wǎng)站骨架搭好了,現(xiàn)在我們來介紹怎樣網(wǎng)站配置Server Block。舉個例子,如果通過phpmyadmin.rocknroll.com訪問我們之前設置好的phpMyAdmin軟件,可以通過穿件配置文件達到目的:
// 網(wǎng)上有很多不同的方法生成下列文件,我這里列出來的是相對容易理解跟閱讀的初級設置方法,僅供參考 server { listen 80; # 監(jiān)聽80端口 root /usr/share/phpmyadmin; # 網(wǎng)站的絕對路徑 index index.php index.html index.htm index.nginx-debian.html; # Index的可執(zhí)行文件 server_name phpmyadmin.rocknroll.com; # 你的域名。這里可以用變量代替域名$host rewrite (.*) https://phpmyadmin.rocknroll.com$1 permanent; # 跳轉到HTTPS協(xié)議。這里可以用變量代替域名$host } server { listen 443; # 監(jiān)聽443端口 server_name phpmyadmin.rocknroll.com; # 你的域名。 # 以下為SSL證書設置 ssl on; ssl_certificate /etc/ssl/phpmyadmin.rocknroll.com/1_phpmyadmin.rocknroll.com_bundle.crt; # 存放SSL證書的絕對路徑 ssl_certificate_key /etc/ssl/phpmyadmin.rocknroll.com/2_phpmyadmin.rocknroll.com.key; # 存放SSL證書的絕對路徑 ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 按照這個協(xié)議配置 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # 按照這個套件配置 ssl_prefer_server_ciphers on; root /usr/share/phpmyadmin; # 網(wǎng)站的絕對路徑 access_log /var/log/nginx/phpmyadmin.rocknroll.com.access.log; # 網(wǎng)站的訪問日志 error_log /var/log/nginx/phpmyadmin.rocknroll.com.error.log; # 網(wǎng)站的錯誤日志 #location決定客戶端發(fā)過來的請求URI如何處理 location / { # 處理所有請求 index index.php; try_files $uri $uri/ /index.php$is_args$query_string; } location ~ .php$ { # 處理以php結尾的文件的所有請求 try_files $uri =404; fastcgi_pass unix:/run/php/php7.1-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } }
關于配置文件,我們需要注意的幾個關鍵點:
檢測配置文件是否正確:
# 每次修改配置文件都要檢查一下,如果有錯誤會報錯。 $ sudo nginx -t # 然后根據(jù)需要重啟相關服務。 $ sudo /etc/init.d/nginx restart //重啟Nginx $ sudo /etc/init.d/php7.1-fpm restart //重啟PHP
網(wǎng)站的絕對路徑,Nginx通常的配置喜歡是將網(wǎng)站放置到/var/www/html這個目錄下面,當然也可以根據(jù)個人喜歡放到其他路徑下面。好比我個人比較偏向放到 /srv/www下面.
root /usr/share/phpmyadmin; # 網(wǎng)站的絕對路徑, 如有需要可以創(chuàng)建
網(wǎng)站域名:
server_name phpmyadmin.rocknroll.com; # 這里是指定你的域名,可以是一個可以是多個, 用空格鏈接。這樣如果有用戶訪問該域名就會自動檢測這里配對其他設置。
強制HTTPS訪問
rewrite (.*) https://phpmyadmin.rocknroll.com$1 permanent; # 這個是Nginx用于跳轉的一種方法, 類似htaccess的rewrite,主要是目的是強制改成https訪問增加安全性大功告成
到此為止,LEMP(Linux, Nginx, MySQL, PHP)服務器的基礎設置完成!
最后簡單說一下基礎的服務器安全問題。
要時常更新服務器軟件 $ sudo apt-get update && apt-get -s upgrade 這樣可以杜絕很多最新的服務器腳本漏洞
能不用遠程就不用遠程。如果實在要用請加強密碼設置。堅決不是用root遠程。并且改掉22端口: 修改/etc/ssh/sshd_config 取消 #Port 22的注釋改成其他號碼。一定要記得重啟sshd服務。
隱藏Nginx的版本號碼。大牛可以根據(jù)這個查找對應版本漏洞攻擊你的網(wǎng)站。 修改 /etc/nginx/nginx.conf文件,設置server_tokens off;
強制使用HTTPS協(xié)議。
數(shù)據(jù)庫也不要開啟遠程,要強制設置bind-address = 127.0.0.1在文件/etc/mysql/my.cnf里面
PHP的安全要記得設置disable_functions禁止不安全函數(shù),控制最大文件上傳Size,然后記得修改max_execution_time, max_input_time, memory_limit, 記得修改cgi.fix_pathinfo=0
總算嘚啵完了,大家辛苦了?
*本文的一些圖片來自網(wǎng)絡,如有任何侵權告之必刪
提前打個廣告:下一期我來說說怎么在開發(fā)環(huán)境(staging) 跟生產(chǎn)環(huán)境(production)下發(fā)布網(wǎng)站文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28201.html
摘要:這個文檔,騰訊云的官網(wǎng)寫的比較詳細,可自行參考。騰訊云提供了免費的證書,雖然級別不高,不過對普通人絕對夠了,這點要給肥鵝個贊。 前言 公司業(yè)務擴展需要大力提高微信用戶的關注度,但是主服務器都在境外,國內客戶訪問速度成為了最大的障礙。先后試驗過CloudFlare跟騰訊DNS加速,但是都無法逾越我們的萬里長城萬里長。所以決定將服務區(qū)塊整體遷移,將國際跟國內業(yè)務分開。在對比了騰訊跟阿里兩朵...
摘要:環(huán)境搭建安裝之后訪問出現(xiàn)歡迎界面安裝注意可以查詢模塊擴展安裝注意期間要設置密碼,填兩次密碼,注意查看和通信有種方式,一種是方式,還有種是方式。 Ubuntu16.04 lnmp 環(huán)境搭建 nginx 安裝 sudo apt-add-repository ppa:nginx/stablesudo apt-add-repository ppa:ondrej/phpsudo apt upda...
閱讀 1792·2021-09-03 10:50
閱讀 1326·2019-08-30 15:55
閱讀 3369·2019-08-30 15:52
閱讀 1231·2019-08-30 15:44
閱讀 934·2019-08-30 15:44
閱讀 3319·2019-08-30 14:23
閱讀 3551·2019-08-28 17:51
閱讀 2291·2019-08-26 13:52