標簽:Linux
系統運維, 經驗雜筆Linux CentOS環境下使用vsftpd搭建ftp服務器-安裝、配置
FTP在服務器中是門戶集的應用,幾乎人人都有接觸。先森在公司上班也有三個月了,FTP的搭建也有了自己的一個文檔,最近都沒有怎么更新博客了,所以把自己用的部署文檔整理一下發布出來,有問題還請指點。公司服務器用的FTP服務器都是清一色的vsftpd,所以本文是用vsftpd搭建FTP服務器。另外,先森發現,萬網免費虛擬主機用的FTP也是vsftpd。vsftpdvsftpd安裝安裝沒有什么說的,vsftpd可以直接yum安裝,也可以下載rpm包安裝:rpm -ivh vsftpd-2.2.2-11.el6_4.1.x86_64.rpm因為先森用的是CentOS 6.8的系統,默認安裝的vsftpd版本為2.2.2的。相關命令如下:# 啟動ftp服務service vsftpd start# 查看ftp服務狀態service vsftpd status # 重啟ftp服務service vsftpd restart# 關閉ftp服務service vsftpd stop創建FTP用戶首先創建一個不能登錄系統的用戶:useradd -d /web/data/ftp -s /sbin/nologin -M xsftpuseradd參數解釋:-d:設置用戶根目錄-s:設置用戶登錄后所用的shel-M:創建用戶不自動創建根目錄設置用戶權限到文件夾chown -R xsftp /web/data/ftp設置權限chmod 777 /web/data/ftp設置密碼passwd amtftp -> 密碼 -> 確認密碼有時候需要修改FTP用戶的根目錄,下面說下怎么修改。usermod -d /usr/newfolder -u uid usernameuid:用戶UID,可在/etc/passwd中查到。username:用戶名修改配置文件vsftpd的配置配置文件:/etc/vsftpd/vsftpd.confvi /etc/vsftpd/vsftpd.conf修改以下參數:anonymous_enable=NO# YES改為NO,禁止匿名用戶登錄取消注釋:chroot_local_user=YES#是否將所有用戶限制在主目錄,YES為啟用,NO或者注釋為禁用末尾添加:pasv_enable=yes #開啟FTP被動模式pasv_max_port=6666pasv_min_port=5555 # FTP被動模式所用端口范圍5555到6666保存退出防火墻iptables的配置,開啟FTP端口vim /etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 5555:6666 -j ACCEPTservice iptables restart【限制用戶只能訪問其主目錄】很多情況下,我們希望限制ftp用戶只能在其主目錄下(root dir)下活動,不允許他們跳出主目錄之外瀏覽服務器上的其他目錄,這時候我就需要使用到chroot_local_user,chroot_list_enable,chroot_list_file這三個選項了。chroot_local_user#是否將所有用戶限制在主目錄,YES為啟用,NO禁用.(該項默認值是NO,即在安裝vsftpd后不做配置的話,ftp用戶是可以向上切換到要目錄之外的)chroot_list_enable#是否啟動限制用戶的名單 YES為啟用,NO禁用(包括注釋掉也為禁用)chroot_list_file=/etc/vsftpd/chroot_list#是否限制在主目錄下的用戶名單至于是限制名單還是排除名單,這取決于chroot_local_user的值,我們可以這樣記憶: chroot_local_user總是一個全局性的設定,其為YES時,全部用戶被鎖定于主目錄,其為NO時,全部用戶不被鎖定于主目錄。那么我們勢必需要在全局設定下能做出一些“微調”,即,我們總是需要一種“例外機制",所以當chroot_list_enable=YES時,表示我們“需要例外”。而”例外“的含義總是有一個上下文的,即,當”全部用戶被鎖定于主目錄“時(即chroot_local_user=YES),"例外"就是:不被鎖定的用戶是哪些;當"全部用戶不被鎖定于主目錄"時(即chroot_local_user=NO),"例外"“就是:要被鎖定的用戶是哪些。這樣解釋和記憶兩者之間的關系就很清晰了!
系統運維, 經驗雜筆keepalived+lvs+nginx+tomcat輪詢模式刷新很久才切換realserver
先森剛接觸運維,當然要學習部署各種集群環境,從最開始的LVS+nginx搭建,到現在Keepalived+lvs+nginx+tomcat搭建,集群的搭建也開始慢慢的得心應手了。不過,前進的道路上總是荊棘遍布。先森的LVS用的是DR模式下的RR輪詢算法,這個算法會實現的效果是每個訪問會輪流分布到后端服務器1、2、3..上面去,后端服務器相當于在和訪問打車輪戰。keepalived+lvs+nginx+tomcat拓撲圖然而,先森環境部署好之后,要刷新很久之后,才換切換到另一個后端服務器,雖然這也是一定意義上的達到了目標,但心中總還是有個疙瘩。那么為什么會出現這樣的問題呢?影響因素經過先森的測試,影響刷新輪詢的配置keepalived、Nginx、Tomcat分別有一個,也就是一共有三個配置會影響到。keepalived配置首先,在keepalived的配置文件中,存在一個會話保持時間的配置。vim /etc/keepalived/keepalived.confpersistence_timeout 50 #50秒為默認值會話保持時間這里有個默認為50秒的會話保持時間。如果設置了這一項,那么久會等待50秒后才會切換realserver。如果上面的這樣配置已經刪除或注釋,但問題依舊存在,那么一定就是Nginx和Tomcat的配置問題了。Nginx配置編輯打開到nginx的配置文件:vim /usr/local/nginx/conf/nginx.conf在http模塊下面就存在影響刷新輪詢的配置:Nginx的配置在nginx.conf中,有一項配置:keepalive_timeout 65;這是nginx默認的連接超時時間,默認為65秒。將數字改為0即可。或者把上圖中65那行注釋,0那行取消注釋就好。Tomcat配置同樣的,在Tomcat中也有相關配置。同樣編輯打開Tomcat的配置文件:vim /web/soft/tomcat/conf/server.xml找到設置Http訪問端口那一段:Tomcat的配置在server.xml中,設置外部訪問端口那一段,有個connectionTimeout的設置,即連接超時時間:connectionTimeout="20000"這個值默認是2000毫秒,將其改為10毫秒左右即可。不可以改為0,設置為0表示永不超時。警告總體來說,上面的三個配置都是修改的會話保持時間。但是會話保持時間是不能隨意修改的。什么是會話保持呢?會話保持是指在負載均衡器上有一種機制,在作負載均衡的同時,還保證同一用戶相關連的訪問請求會被分配到同一臺服務器上。會話保持有什么作用呢?舉例說明一下如果有一個用戶訪問請求被分配到服務器A,并且在服務器A登錄了,并且在很短的時間,這個用戶又發出了一個請求,如果沒有會話保持功能的話,這個用戶的請求很有可能會被分配到服務器B去,這個時候在服務器B上是沒有登錄的,所以你要重新登錄,但是用戶并不知道自己的請求被分配到了哪里,用戶的感覺就是登錄了,怎么又要登錄,用戶體驗很不好。所以,切記的是,修改上面的三項會話保持時長的配置僅僅只是用于環境測試,如果在生產環境,一定要按照需求設置。
腳本編程, 系統運維, 經驗雜筆Linux增加命令識別度的PS1命令提示符格式設置
我始終覺得,在Xshell中ssh連接服務器,敲了很多命令,想要回去查看直接命令的結果的時候,一行一行的命令容易看花眼,不能準確的在一行行命令中,找到輸入命令的那一行。代碼看花了眼在搜教程的時候,我無意間看到一個教程中的終端截圖了,別人的命令提示符“#”號是紅色的,我頓時眼前一亮,我覺得這樣的識別度就比較高了。但是當時不知道這是怎么實現的,還以為是Xshell的配置,還在顏色配置中找了半天,無果后只能暫時放棄。紅色提示符后來終于找到了設置方法,原來是linux的終端命令提示符的變量PS1。初階用法其實PS1就是用來設置命令提示符格式的環境變量。我的設置方法是,在~/.bashrc末尾添加PS1的變量,再刷新一下就可以了。也可以在/etc/profile中添加。vim ~/.bashrcPS1="[\u@\h \W]\[\e[31;40m\]\\$ \[\e[0m" #末尾添加source ~/.bashrc # 刷新這個變量初看是不怎么看的懂的,但是它的規則其實也很簡單。下面是需要顯示的信息代碼:\d :代表日期,格式為weekday month date,例如:"Mon Aug 1"\H :完整的主機名稱。例如:我的機器名稱為:fc4.linux,則這個名稱就是fc4.linux\h :僅取主機的第一個名字,如上例,則為fc4,.linux則被省略\t :顯示時間為24小時格式,如:HH:MM:SS\T :顯示時間為12小時格式\A :顯示時間為24小時格式:HH:MM\u :當前用戶的賬號名稱\v :BASH的版本信息\w :完整的工作目錄名稱。家目錄會以 ~代替\W :利用basename取得工作目錄名稱,所以只會列出最后一個目錄\# :下達的第幾個命令\$ :提示字符,如果是root時,提示符為:# ,普通用戶則為:$下面是設置這些代碼顏色的代碼:前景 背景 顏色-----------------------------30 40 黑色31 41 紅色32 42 綠色33 43 黃色34 44 藍色35 45 紫紅色36 46 青藍色37 47 白色我配置的很簡單,就是增加了一個 # 號為紅色:PS1="[\u@\h \W]\[\e[31;40m\]\\$ \[\e[0m"其實背景色可以不用設置,那么就是這樣:PS1="[\u@\h \W]\[\e[31m\]\\$ \[\e[0m"效果如下:展示效果實際上還有很多自定義的樣式,比如:PS1="\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[35;40m\]\W\[\e[0m\]]\\$ "效果如下:其他樣式由上面兩個案例其實可以看出,設置顏色的方式,是在顯示信息代碼的前面加上“\[\e[37;40m\]”的代碼,其中的數字就是前景色和背景色的數值。搞明白了規則,那么可以愉快的DIY了各種樣式高階用法如果說上面只是初階用法的話,那么下面從張戈博客那里看到的用法可以稱的上為高階用法,可以避免很多生產環境中的錯誤。在生產環境中,我們運維工程師手底下隨隨便便可能就有成百上千臺的服務器, 連先森都有數十臺。而連接這些服務器一般都是用跳板機,由于這些機器一般都是克隆或者虛擬化出來的,所以登陸后的命令行提示符幾乎是一個模子刻出來的,比如都是:[root@localhost ~]#所以為了更好的區別服務器,張戈提出了優化PS1的方式,讓命令提示符中囊括當前服務器的IP地址,以及當前路徑。設置的PS1代碼如下:export PS1='\[\e[32m\][\u@192.168.1.1:\[\e[m\]\[\e[33m\]\w\[\e[m\]\[\e[32m\]]\[\e[m\]\$ '前后效果如下:設置前后效果如果就這么簡單,那么張戈就不是張戈了。服務器那么多,如果一臺一臺你慢慢找IP地址,然后慢慢設置,那就太慢了。而且就算你設置好,不知道什么時候IP地址就變了,你還得修改。所以張戈寫了一個據說很簡單,但我覺得還是很復雜的Shell腳本,來幫我們實現這個效果。#!/bin/sh########################################################################## Update PS1 like [root@192.168.1.113 /data]# ###########################################################################先判斷網卡是否存在,我這邊eth1是內網網卡ifconfig eth1 >/dev/null 2>&1 if [[ $? != 0 ]]then echo 'interface eth1 not exsit!'; exit 1fi#Centos/Redhat 7 ifconfig顯示的結果不是 inet addr: 而是 inet 直接加IP,所以這里需要判斷下:function Get_eth1IP(){ if [[ $1 -eq 7 ]] then #for centos 7 eth1_IP=$(ifconfig eth1 |awk '/inet / {print $2}'|awk '{print $1}') else eth1_IP=$(ifconfig eth1 |awk -F":" '/inet addr:/ {print $2}'|awk '{print $1}') fi} test -f /etc/redhat-release && grep 7 /etc/redhat-release >/dev/null 2>&1 && Get_eth1IP 7test -f /etc/centos-release && grep 7 /etc/redhat-release >/dev/null 2>&1 && Get_eth1IP 7 || Get_eth1IP echo $eth1_IP | grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" >/dev/null 2>&1 if [[ $? != 0 ]]then echo 'eth1_IP is empty!' exit 1fifunction Export(){ echo "export PS1='\[\e[32m\][\u@${eth1_IP}:\[\e[m\]\[\e[33m\]\w\[\e[m\]\[\e[32m\]]\[\e[m\]\\$ '">>${1} && \ echo -e "\033[32m Update \033[0m \033[33m${1}\033[33m \033[32mSuccess! Please relogin your system for refresh... \033[0m"} function home_env(){ if [[ ! -z $1 ]] then home=$1 else home=/root fi #有的用戶可能會在家目錄下自定義一些配置,即 .proflie這個隱藏文件,所以也需要更新 test -f $home/.profile && ( sed -i '/export PS1=/d' $home/.profile Export $home/.profile )} #獲取當前用戶id,如果是root組的則可以操作/etc/profileuserid=$(id | awk '{print $1}' | sed -e 's/=/ /' -e 's/(/ /' -e 's/)/ /'|awk '{print $2}')if [[ $userid = 0 ]]then #for all sed -i '/export PS1=/d' /etc/profile Export /etc/profile #for root home_env #如果其他用戶需要修改,只要開啟一下三行,并將other修改成用戶名 #id other >/dev/null 2>&1 && ( # home_env ~other #)else #for userself home_env ~fi注意:1、張戈將變量寫進的是/etc/profile中,而不是我試用的~/.bashrc中。2、修改腳本中的網卡,張戈是eth1,而我是eth0 。如果不修改直接運行的話,可能會直接被退出終端。所以使用以下命令替換eth1為自己的網卡名稱:sed -i 's/eth1/eth0/g' update_PS1.sh運行腳本的方式,是source ./update_PS1.sh運行腳本接著,重新登錄或者source /etc/profile就可以看到效果了:刷新變量如果你覺得這樣兩步實現麻煩,可以在腳本最后添加一行source /etc/profile 即可立即見效:一步見效但是我覺得這種樣式顏色有點單調,所以做了兩種改變格式:樣式改變PS1的樣式代碼就不用說了,都是在張戈的基礎上修改一下。怎樣設置,就看個人喜好了。
系統運維, 經驗雜筆LVS+Keepalived時主備負載均衡器都有VIP的問題
先森在模擬搭建LVS+Keepalived的環境,LVS是做負載均衡的,Keepalived是做高可用的。在搭建好之后,先森遇到了一個奇怪的問題,兩個負載均衡器MASTER和BACKUP都搶占到了VIP。不過還好的是,實際上同一時間內只有一個VIP在起作用。下面就來談談先森的解決過程。解決過程通過不停的查找問題,我發現,只需要關閉備用負載均衡器的防火墻,那么主備服務器都有VIP的情況就會得以解決。由此可以肯定,問題就是出現在了防火墻這里。首先用tcpdump查看一下vrrp的組播情況,這個隨便在同網絡的任意一臺服務器抓包即可:tcpdump vrrp -n # -n:不把主機的網絡地址轉換成名字查看下抓包的結果:tcpdump抓包由上圖可以看到,192.168.2.79和192.168.2.53兩個IP在輪流發送組播信號。而正常的應該是由MASTER服務器發送組播,如果BACKUP收不到MASTER的組播信號了,那么判定MASTER宕機了,BACKUP就會接手VIP。2016年12月01日更新SElinux首先,先確定服務器的SElinux是否設置為關閉。一般都是將其關閉的,在CentOS先森嘗試了啟用,但是也沒有firewall-cmd這個命令,無法添加端口,所以還是將其關閉吧。查看SElinux的狀態:getenforce可能的結果有三個:Enforcing #強制開啟Permissive #寬容模式Disabled #關閉如果是Enforcing強制模式,就需要關閉:setenforce 0 #設置為寬容模式但這樣只在本次生效,重啟服務器后將失效。如果要永久關閉,還需要修改配置文件:sed -i 's/=enforcing/=disabled/g' /etc/sysconfig/selinuxiptables防火墻如果將SElinux關閉問題依舊存在,則可能是防火墻將MASTER的VRRP組播給擋住了。首先將防火墻關閉,確定防火墻是否為罪魁禍首。service iptables stop如果關閉防火墻,keepalived問題解決了,那么問題就簡單了,我們只需要讓VRRP組播其通過防火墻即可。我們只需要在防火墻中增加一條規則即可:-A INPUT -p vrrp -j ACCEPT但是這里有個坑,默認的防火墻中基本是如下配置:# Firewall configuration written by system-config-firewall# Manual customization of this file is not recommended.*filter:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT-A INPUT -p icmp -j ACCEPT-A INPUT -i lo -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT-A INPUT -j REJECT --reject-with icmp-host-prohibited-A FORWARD -j REJECT --reject-with icmp-host-prohibitedCOMMIT添加規則一定不要在-A INPUT -j REJECT --reject-with icmp-host-prohibited之后,一定要加在其前面。防火墻配置這時候重啟防火墻后查看BACKUP的ip,就會發現VIP已經不在了。再關閉一下MASTER的keepalived,并打開BACKUP的日志,就可以看到正確的內容:tail -f /var/log/messagesKeepalived切換VIP總結如果不是防火墻的原因,那么久應該仔細查看配置文件中的vrrp_sync_group中設置的VRRP組等設置是否相同,當然還有其他的可能性,但大多都是VRRP組播信號的問題。在解決問題的過程中,排除法無疑是最簡單粗暴定位問題的方法,要靈活運用。Keepalived是個很好玩也很好用的軟件,建議朋友們多研究研究。
系統運維, 經驗雜筆CentOS 6.8編譯安裝MySQL
先森來公司試用也有一個半月了,從剛畢業到現在也成長了很多。運維工程師,最基本的當屬各種命令,然后是各種服務的搭建部署了。先森這一個半月也不是白混的,也搭建了很多服務了,好久沒更新博客了,今天也把先森編譯安裝MySQL的過程寫出來。MySQL編譯安裝編譯安裝1、首先要先查看系統是否已經創建過mysql用戶。使用下面的命令查看是否有mysql用戶及用戶組cat /etc/passwd #查看用戶列表cat /etc/group #查看用戶組列表2、如果沒有就創建groupadd mysqluseradd -g mysql mysql3、解壓安裝包到/usr/local/目錄下,并重命名為mysql。修改/usr/local/mysql權限:chown -R mysql:mysql /usr/local/mysql4、修改配置文件注:在啟動MySQL服務時,會按照一定次序搜索my.cnf,先在/etc目錄下找,找不到則會搜索"$basedir/my.cnf",在本例中就是 /usr/local/mysql/my.cnf,這是新版MySQL的配置文件的默認位置!在CentOS 6.4版操作系統的最小安裝完成后,在/etc目錄下會存在一個my.cnf,需要將此文件更名為其他的名字,如:/etc/my.cnf.bak,否則,該文件會干擾源碼安裝的MySQL的正確配置,造成無法啟動。mv /etc/my.cnf /etc/my.cnf.bak復制mysql服務啟動配置文件cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf5、進入安裝路徑,執行初始化配置腳本,創建系統自帶的數據庫和表cd /usr/local/mysqlscripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql6、添加到系統服務、啟動MySQL添加服務,拷貝服務腳本到init.d目錄,并設置開機啟動cp support-files/mysql.server /etc/init.d/mysqlchkconfig mysql onservice mysql start --啟動MySQL7、添加環境變量啟動MySQL后,我們還無法直接使用“mysql”命令進入數據庫,這時候還需要添加環境變量。修改/etc/profile文件,在文件末尾添加PATH=/usr/local/mysql/bin:$PATHexport PATH保存退出后,運行下面的命令,讓配置立即生效source /etc/profile8、安全雖然我們這時候已經可以直接進入數據庫并未數據庫用戶設置密碼了,但是這樣并不安全。MySQL為我們提供了安全配置向導腳本mysql_secure_installation執行 /usr/local/mysql/bin/mysql_secure_installation下面是執行后的一些重要交互項,中間內容省略:Enter current password for root (enter for none):<–初次運行直接回車...Set root password? [Y/n] <– 是否設置root用戶密碼,輸入y并回車或直接回車New password: <– 設置root用戶的密碼Re-enter new password: <– 再輸入一次你設置的密碼...Remove anonymous users? [Y/n] <– 是否刪除匿名用戶,生產環境建議刪除,所以直接回車...Disallow root login remotely? [Y/n] <–是否禁止root遠程登錄,根據自己的需求選擇Y/n并回車,建議禁止...Remove test database and access to it? [Y/n] <– 是否刪除test數據庫,直接回車...Reload privilege tables now? [Y/n] <– 是否重新加載權限表,直接回車9、如果我們需要給其他數據庫用戶設置密碼,以root為例,執行下面的命令設置密碼:mysql -uroot mysql> SET PASSWORD = PASSWORD('123456');10、在安全向導中我們已經關閉了root用戶遠程訪問,若因業務需要我們由需要設置root用戶遠程訪問,那么執行mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;mysql> flush privileges;簡單的解釋一下:*.*是指允許訪問任何數據庫與數據表;'root'@'%':root是指定用戶,百分號是允許root用戶從任何網絡遠程訪問數據庫,也可以是“192.168.2.%”這種形式。后面的123456就是遠程訪問的密碼啦,不知道如果跳過上一步的設置密碼過程,直接在這里設置密碼,是否也能達到設置密碼的效果,先森還沒有嘗試過。如果知道的朋友可以告訴先森一聲。11、配置防火墻防火墻的3306端口默認沒有開啟,若要遠程訪問,需要開啟這個端口打開/etc/sysconfig/iptables在“-A INPUT –m state --state NEW –m tcp –p –dport 22 –j ACCEPT”,下添加:-A INPUT -m state --state NEW -m tcp -p -dport 3306 -j ACCEPT然后保存,并關閉該文件,在終端內運行下面的命令,重啟防火墻以刷新防火墻配置:service iptables restart12、創建數據庫CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;總結因為數據庫可以說是服務器中最重要的服務之一了,所以它的安全就顯得尤為重要。下面是先森的一些建議:1、最好不要設置遠程訪問權限;2、不要開啟防火墻端口或使用默認3306端口;3、盡量不要使用root這種默認用戶;4、保證密碼的復雜性;5、做好數據庫備份。當然做好數據庫的安全不僅僅是以上幾點。但如果連以上幾點都沒有做到,那么數據庫就非常危險了。
系統運維, 經驗雜筆CentOS下rsync服務器安裝與配置-數據同步|文件增量備份
我們在使用服務器發布我們的網站或者生產環境中部署業務的時候,通常要考慮到文件的備份,而文件的備份比較高效的備份是增量備份,rsync軟件就是這樣的一個工具。為了實現多個服務器負載均衡,我們需要這幾個服務器之間進行數據同步,而rsync軟件也能勝任,下面先森來介紹如何架設rsync服務器來達到文件增量備份和數據同步的功能。Rsync同步什么是rsyncRsync(remote synchronize)是一個遠程文件同步工具;Rsync使用“Rsync算法”來同步文件,該算法只傳送兩個文件的不同部分,因此速度相當快;Rsync是替代rcp的一個工具,目前由rsync.samba.org維護,因而rsync.conf文件的格式類似于samba的主配置文件; Rsync可通過rsh或ssh使用,也能以daemon模式運行,以daemon方式運行時,Rsync Server會打開一個873端口等待客戶端連接.連接時,Rsync Server會檢查口令是否相符,若口令相符,則進行文件傳輸.第一次會把整份文件傳輸一次,以后則為增量傳輸;Rsync支持大多數的類Unix系統(Linux、Solaris、BSD等);此外,在windows平臺也有相應的版本,如cwRsync和Sync2NAS等工具。環境準備既然是同步,首先我們需要準備的是兩臺服務器。先森準備的是虛擬機上的兩臺裝好CentOS 6.8的服務器。為了方便,我們稱其中主要使用的、產生數據的一臺為服務端。用于備份數據的那臺稱為客戶端。兩臺服務器都需要安裝rsync。rsyncf服務端rsync的安裝rsync有很多種安裝方式,最簡單的是yum安裝,復雜一點的是編譯安裝,還有先森選擇的是rpm包安裝。先森rsync版本是的rsync-3.0.9-2.el6.rfx.x86_64.rpm,直接安裝即可。rpm -ivh rsync-3.0.9-2.el6.rfx.x86_64.rpmrsync的啟動方法一:CentOS 默認以 xinetd 方式運行 rsync 服務。所以選擇這種方式啟動還需要安裝超級守護進程xinetd。yum install -y xinetdrsync 的 xinetd 配置文件在 /etc/xinetd.d/rsync。編輯rsync的xinetd配置文件/etc/xinetd.d/rsync文件,修改參數 server_args = --daemon --config=/etc/rsyncd/rsyncd.conf可以配置rsync服務器啟動時的參數。(一般不需要)要配置以 xinetd 運行的 rsync 服務需要執行如下的命令:chkconfig rsync onservice xinetd restart方法二:獨立運行 rsync 服務最簡單的獨立運行 rsync 服務的方法是執行如下的命令:/usr/bin/rsync --daemon#編輯 /etc/rc.local文件 加入/usr/bin/rsync --daemon保證每次開機啟動都會自動啟動rsync服務。方法一的優點是,開啟、停止rsync服務方便。方法二的優點在于不用先安裝一個服務。如何選擇還是視使用情況而定了。一般來說:rsync服務器負載比較高,則使用獨立啟動模式rsync服務器負載較低,使用xinetd運行方式rsync的配置rsync的主要有以下三個配置文件:rsyncd.conf (主配置文件)rsyncd.secrets (密碼文件)rsyncd.motd (rysnc服務器信息:連接后的歡迎信息)兩種 rsync 服務運行方式都需要配置 rsyncd.conf,其格式類似于 samba 的主配置文件。# mkdir /etc/rsyncd# cd /etc/rsyncd# touch rsyncd.conf# touch rsyncd.secrets# touch rsyncd.motd配置文件 rsyncd.conf 默認在 /etc 目錄下。為了將所有與 rsync 服務相關的文件放在單獨的目錄下,可以執行如下命令:ln -s /etc/rsyncd/rsyncd.conf /etc/rsyncd.conf注:創建軟鏈接一定要用絕對路徑,用相對路徑會造成斷鏈。為了密碼安全,我們需要把rsyncd.secrets的權限設置為600chmod 600 rsyncd.secrets1、配置rsyncd.conf文件#服務器傳輸文件時用root 權限執行 uid = rootgid = root#指定服務端口,默認873port = 873use chroot = no#只讀,不讓客戶端上傳文件到服務器read only = yes#limit access to private LANs#限制能訪問該服務的網段hosts allow=192.168.0.0/255.255.0.0hosts deny=*#最大連接數 max connections = 5#告訴進程寫到該文件中 pid file = /var/run/rsyncd.pid#密碼存在哪個文件secrets file = /etc/rsyncd/rsyncd.secrets #服務器信息定義指向該文件,該文件可寫服務器信息,歡迎的文字motd file = /etc/rsyncd/rsyncd.motd#rsync 服務器的日志log file = /var/log/rsync.log#這是傳輸文件的日志transfer logging = yes#日志文件格式log format = %t %a %m %f %bsyslog facility = local3timeout = 300 #超時時間# MODULE OPTIONS#模塊的名稱,可以自定義[testhome]#同步的目錄 path = /usr/local/nginx/ftplist=yes#忽略IO錯誤ignore errors#驗證用戶,我的用戶是rootauth users = rootcomment = test home#不同步的目錄exclude = .git/#模塊的名稱,可以自定義[datahome]#同步的目錄 path = /web/data#rsync 服務器上提供同步數據的目錄在服務器上模塊是否顯示列出來。list=yes#忽略IO錯誤ignore errors#驗證用戶,我的用戶是userauth users = user#注釋可以自己定義,寫什么都行,寫點相關的內容就行comment = data home#不同步的目錄exclude = .git/2、配置rsyncd.secrets文件密碼文件: rsyncd.secrets的內容格式:“用戶名:口令”例:root:123456user:123456為了密碼的安全性,我們要保證把權限設為600以及root權限chown root:root /etc/rsyncd/rsyncd.secretschmod 600 /etc/rsyncd/rsyncd.secrets3、配置rsyncd.motd文件這個文件是客戶端連接時看到的歡迎信息文件,內容自定義,也可以為空:++++++++++++++++++++++++++++++++++++++Welcome++++++++++++++++++++++++++++++++++++++4、開啟防火墻873端口Linux 防火墻是用iptables,所以我們至少在服務器端要讓你所定義的rsync 服務器端口通過,客戶端上也應該讓通過。iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT/etc/rc.d/init.d/iptables save查看一下防火墻是不是打開了 873端口;iptables -L -n5、啟動rsyncservice xinetd start6、查看服務是否運行netstat -an | grep 873tcp 0 0 :::873 :::* LISTEN 3399/xinetdrsyncf客戶端1、安裝客戶端也要安裝rsync,但是不用做配置,也不用啟動,因為客戶端僅僅需要能夠運行# rsync *** 這條命令yum install -y xinetdrpm -ivh rsync-3.0.9-2.el6.rfx.x86_64.rpm2、同步數據(1)方式一:rsync -avzP root@192.168.2.72::testhome /tmp/david/參數說明:-a --archive 歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性,等于-rlptgoD。-z 傳輸時壓縮;-P 傳輸進度;-v --verbose 詳細模式輸出;-r 是遞歸;-l 是鏈接文件,意思是拷貝鏈接文件;-p 表示保持文件原有權限;-t 保持文件原有時間;-g 保持文件原有用戶組;-o 保持文件原有屬主;-D 相當于塊設備文件。root是認證用戶,IP地址是服務端的IP,testhome是配置文件中寫的模塊名稱,/tmp/david是指保存到客戶端的位置。(2)方式二:rsync -avzP --delete root@192.168.2.72::testhome /tmp/david/這回我們引入一個 –delete 選項,表示客戶端上的數據要與服務器端完全一致,如果 linuxsirhome目錄中有服務器上不存在的文件,則刪除。最終目的是讓linuxsirhome目錄上的數據完全與服務器。上保持一致;用的時候要小心點,最好不要把已經有重要數所據的目錄,當做本地更新目錄,否則會把你的數據全部刪除。(3)方式三:rsync -avzP --delete --password-file=rsync.password root@192.168.2.72::testhome /tmp/david/這次我們加了一個選項 –password-file=rsync.password ,這是當我們以linuxsir用戶登錄rsync服務器同步數據時,密碼將讀取 rsync.password 這個文件。這個文件內容只是服務端中rsync中設置的root認證用戶的密碼。在你需要的地方創建rsync.password文件,然后只保存密碼在其中:touch rsync.passwordecho "123456" > rsync.passwordchmod 600 rsync.password3、用crontab讓客戶端自動與服務端同步數據我們在/etc/cron.daily.rsync中創建了一個文件名為:root.sh ,并且是權限是 755mkdir /etc/cron.daily.rsynccd /etc/cron.daily.rsynctouch root.shchmod 755 root.sh編輯root.sh,內容如下:vim root.sh#!/bin/sh#192.168.2.72 testhome backup/usr/bin/rsync -avzP --delete --password-file=/etc/rsyncd/rsyncd.secrets root@192.168.2.72::testhome /tmp/david/:wq然后創建定時任務:crontab -e*/1 * * * * /usr/bin/run-parts /etc/cron.daily.rsync 1> /dev/null表示每分鐘執行一次/etc/cron.daily.rsync里的腳本。查看定時任務:crontab -l當然,如果你覺得創建腳本麻煩的話,也可以直接將命令寫在定時任務中。crontab -e*/1 * * * * usr/bin/rsync -avzP --delete --password-file=/etc/rsyncd/rsyncd.secrets root@192.168.2.72::testhome /tmp/david/測試測試的話非常簡單,只需要在服務端同步文件夾內增加或刪除文件,過一分鐘后到客戶端上看效果即可。總結配置Rsync的環境一定要確保防火墻873端口打開,以及SELinux關閉,否則肯定會出錯的。在配置的過程中可能會出現這樣那樣的問題,先森也會整理一篇問題總結,后續分享。Rsync與Crontab搭配起來同步并不是最好的同步方案,Rsync可以與其他工具使用使得同步更安全、準確,請悉知。
系統運維, 經驗雜筆虛擬機CentOS搭建LVS-DR負載均衡
先森工作三個星期了,從最初的基礎命令學習,到基礎環境搭建,再到現在的高可用負載均衡集群搭建,都通通過了一遍,下周也要開始接觸現網服務器了。在這三周,做的東西都越來越難,越來越麻煩,LVS就是其中之一。LVS是Linux Virtual Server的簡稱,也就是Linux虛擬服務器, 是一個由章文嵩博士發起的自由軟件項目。章文嵩博士曾是阿里巴巴副總裁、技術總監等,現任滴滴出行副總裁。LVS有三種負載均衡模式,分別是LVS-DR、LVS-TUN、LVS-NAT。讓先森郁悶的是,先森用虛擬機除了LVS-DR模式,LVS-TUN和LVS-NAT先森都沒有搭建成功。LVS體系結構首先需要普及一下LVS的體系結構。LVS體系結構圖使用LVS架設的服務器集群系統有三個部分組成:最前端的負載均衡層,用Load Balancer表示。Load Balancer層:位于整個集群系統的最前端,有一臺或者多臺負載調度器(Director Server)組成,LVS模塊就安裝在Director Server上,而Director的主要作用類似于一個路由器,它含有完成LVS功能所設定的路由表,通過這些路由表把用戶的請求分發給Server Array層的應用服務器(Real Server)上。同時,在Director Server上還要安裝對Real Server服務的監控模塊Ldirectord,此模塊用于監測各個Real Server服務的健康狀況。在Real Server不可用時把它從LVS路由表中剔除,恢復時重新加入。中間的服務器群組層,用Server Array表示。Server Array層:由一組實際運行應用服務的機器組成,Real Server可以是WEB服務器、MAIL服務器、FTP服務器、DNS服務器、視頻服務器中的一個或者多個,每個Real Server之間通過高速的LAN或分布在各地的WAN相連接。在實際的應用中,Director Server也可以同時兼任Real Server的角色。最底端的數據共享存儲層,用Shared Storage表示。Shared Storage層:是為所有Real Server提供共享存儲空間和內容一致性的存儲區域,在物理上,一般有磁盤陣列設備組成,為了提供內容的一致性,一般可以通過NFS網絡文件系統共享數據,但是NFS在繁忙的業務系統中,性能并不是很好,此時可以采用集群文件系統,例如Red hat的GFS文件系統,oracle提供的OCFS2文件系統等。在用戶看來,所有的內部應用都是透明的,用戶只是在使用一個虛擬服務器提供的高性能服務。LVS三種模式區別:$IPVSADM -a -t 192.168.31.166:80 -r 192.168.21.100:80 -m -w 1 //-a增加一個real server -m NAT模式 -g dr模式 -t tun模式 -w權重NAT模式:realserver不需要公網ip,director負責接受請求和返回請求。DR模式/TUN模式:每個realserver都需要有公網ip,返回請求不需要經過director,director只負責分發接受的請求。DR模式和TUN模式區別:TUN模式realserver和dr通信使用隧道(修改了ip包頭),DR模式不使用隧道(修改MAC地址)。LVS-DR模式搭建搭建成功后,其實你會發現LVS-DR是非常簡單的。每個realserver都需要有公網ip,返回請求不需要經過director,director只負責分發接受的請求。搭建環境先森是用虛擬機搭建的,準備了三個安裝了CentOS的虛擬機。系統版本:CentOS 6.8外部IP地址內部IP地址角色192.168.2.27/2410.10.10.99/24LVS調度器(虛擬機)192.168.2.66/24 10.10.10.100/24RS1(虛擬機)192.168.2.44/2410.10.10.101/24RS2(虛擬機)192.168.2.233/24無客戶機(自己電腦)本次搭建的拓撲圖如下,圖中的192.168.2.51實為192.168.2.27:LVS-DR拓撲圖調度器服務器要安裝ipvsadm,兩臺真實服務器要運行Apache或者Nginx等web服務器。Director上需要安裝ipvsadm:yum install -y ipvsadm兩個real server 上都安裝apache:yum install -y httpdDR 負載均衡器配置ipvsadm有自己的命令,但是一般都是用shell腳本把需要做的設置寫出來,然后運行shell來完成設置。首先進入一個存放shell腳本的目錄,這個目錄自行選擇。先森選擇將shell腳本放置/usr/local/bin目錄下。cd /usr/local/bin用vim直接打開一個不存在的shell文件,保存的時候會自動創建好。vim lvs_dr.sh打開后添加如下內容:#!/bin/sh VIP=192.168.2.27 # 均衡器外網IP DIP=10.10.10.99 # 均衡器內網IP RIP1=10.10.10.100 # 真實服務器的內網IP RIP2=10.10.10.101 . /etc/rc.d/init.d/functions case "$1" in start) echo "start LVS of DirectorServer" #Set the Virtual IP Address /sbin/ifconfig eth0:1 $DIP netmask 255.255.255.0 up # 給均衡器添加一個內容IP /sbin/route add -host $DIP dev eth0:1 # 給內網IP添加路由 #Clear IPVS Table /sbin/ipvsadm -C # 手工清空原來表內容 #Set Lvs /sbin/ipvsadm -A -t $VIP:80 -s rr # -A添加地址,-t指定VIP TCP端口,-s指定調度算法:rr輪詢算法 /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g # -a指定真實服務器, -t lvs上VIP,-r真實服務器ip及端口,-g先擇DR模式(-m為NAT模式) /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g #Run Lvs /sbin/ipvsadm ;; stop) echo "close LVS Directorserver" /sbin/ipvsadm -C /sbin/ifconfig eth0:1 down ;; *) echo "Usage: $0 {start|stop}" exit 1 esac保存并退出::wq給lvs_dr.sh添加可執行權限:chmod +x lvs_dr.shRS 真實服務器配置兩臺real server也需要添加一個shell腳本,腳本的內容大致相同。還是進入一個保存腳本的目錄:cd /usr/local/bin編輯本不存在的shell腳本:vim lvs_dr_rs.sh在腳本內加入如下內容:#!/bin/bash VIP=192.168.2.27 # 均衡器的VIP地址 RIP=10.10.10.100 # 要給本地服務器設置的內網地址 LOCAL_Name=50bang BROADCAST=192.168.2.255 #vip's broadcast . /etc/rc.d/init.d/functions case "$1" in start) echo "reparing for Real Server" echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $BROADCAST up#為什么要綁定VIP呢?因為DR模式原理是LVS調度器修改mac地址為真實服務器地址,報文的目的IP還是VIP沒修改,,網卡只會把目的MAC和目的IP都是自己的報文上送CPU,所以真實服務器上必須>配置VIP!#為什么使用lo口呢?因為lo口為本地環回口,防止本地局域網IP地址沖突! ifconfig eth0:1 $RIP netmask 255.255.255.0 up # 為本地服務器設置一個內網IP /sbin/route add -host $VIP dev lo:0 ;; stop) ifconfig lo:0 down ifconfig eth0:1 down echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "close LVS Real Server" ;; *) echo "Usage: lvs {start|stop}" exit 1 esac退出保存::wq依舊添加可執行權限:chmod +x lvs_dr_rs.sh運行腳本DR 負載均衡器:./lvs_dr.sh startDR運行腳本RS 真實服務器:./lvs_dr_rs.sh startRS運行腳本檢查網卡:ifconfigDR均衡器的網卡信息RS服務器的網卡信息查看ipvs設置ipvsadm -ln測試運行RS服務器上的Apache或Nginx、Tomcat等任何web服務器,記得開啟防火墻iptables的端口。為了方便測試,可以把Apache的默認頁面內容改為“web1”和“web2”:echo "web1" >/var/www/html/index.html然后在電腦上瀏覽器訪問設置的VIP地址,即192.168.2.27,不停刷新查看效果。如果配置成功則會看到頁面在“web1”和“web2”上輪流切換。第一次打開刷新一次如此,就是先LVS-DR的負載均衡。實際上,LVS-DR還經常和Keepalived搭配起來實現高可用+負載均衡。這個先森也實現了,真的是非常簡單呢,后面會繼續分享。
系統運維, 經驗雜筆Linux CentOS操作系統如何設置禁止別人ping服務器
Linux系統,CentOS操作系統如何設置禁止別人ping我們自己的服務器,下面給大家介紹一些常用的方法。首先我們要明白的是,ping用的是icmp協議。禁止ping實際上是在對icmp協議進行操作。Linux CentOS操作系統如何設置禁止別人ping服務器方法有兩種方法一:以root賬戶進入系統,然后編輯文件icmp_echo_ignore_all[root@centOS ~]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all ## 禁用[root@centOS ~]# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all ## 啟用此上兩條命令的效果實時生效,可以用另外的機器ping來測試是否生效。以上方式只是臨時性的禁ping重啟后會失效,如果想要重啟過后也不能ping可以做如下操作:在/etc/rc.d/rc.local中增加一行echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all另外可以在配置文件 /etc/sysctl.conf 文件中增加一行net.ipv4.icmp_echo_ignore_all=1方法二:使用IPTables禁止PING這下是別人不能ping你,你也不能ping別人,其實使用iptable最簡單iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROPiptables -A INPUT -p icmp --icmp-type 0 -s 0/0 -j ACCEPTiptables -A OUTPUT -p icmp --icmp-type 0 -s 192.168.29.1 -j DROPiptables -A OUTPUT -p icmp --icmp-type 8 -s 192.168.29.1 -j ACCEPT
系統運維, 經驗雜筆用Xshell登錄騰訊云Linux云服務器
先森之前在騰訊云買了一臺屬于Linux操作系統的CentOS 7.1 64位云服務器,再買了一個.cn的域名,共計一元錢。關于購買的事情先森曾經也發文炫耀過《直播了一段用騰訊云校園計劃1元購買免費域名+專享服務器及安全認證》。雖然4月份就買了云服務器了,但是一直也沒時間折騰,直到六一兒童節騰訊云給我發了一封郵件,我決定不忍了,開始動這臺云服務器。騰訊云恭喜先森畢業了在先森正在為畢業傷感的時候,騰訊云跑來恭喜我畢業了,并且還宣布將不再向先森發送學生特權代金券,這不是火上澆油嗎?為了不讓先森每個月交的1元錢白花,先森決定用這個騰訊云服務器搭建一個WordPress網站。但是沒想到,第一次折騰服務器,連怎么用Xshell連接服務器都搞了很久。整明白后其實還是很簡單,今天將過程整理一下。為什么要用Xshell登錄?主要是因為方便,Xshell可以在Windows界面下用SSH來訪問遠端不同系統下的服務器,從而比較好的達到遠程控制終端的目的。騰訊云服務器的控制臺中其實就有登錄入口,是通過一個網頁來連接服務器的。雖然也比較方便了,但是如果每次去管理服務去還打開瀏覽器,再打開網頁,實在有點麻煩了。騰訊云 云主機 控制臺web登錄在這里可以使用賬號密碼登錄,而在Xshell中是不能用密碼登錄的,因為騰訊云服務器的SSH配置中默認把密碼連接關閉了的。關于賬號密碼在購買云服務器的時候,騰訊云在系統通知和郵件都有做下發提醒:騰訊云服務器的賬號密碼用Xshell連接1.SSH密鑰。在購買服務器的前文中提到過,購買的時候需要提前創建一組SSH密鑰,購買的服務器中就會加載上公鑰,密鑰則是在創建時保存到了自己的電腦上,這個很重要。因為騰訊云默認關閉了SSH密碼連接,所以我們需要使用密鑰連接。SSH密鑰 控制臺2.騰訊云安全組。這個安全在有什么用,先森也沒有具體的了解,只是看其備注,好像要SSH連接就需要開啟的樣子,所以先森就加入云服務器了。備注內容:該安全組將只暴露Linux SSH登錄的tcp 22端口到公網,內網所有端口全通,您的CVM如有業務需要放通其它端口(如80、443等)到公網,建議選擇按需新建的安全組。騰訊云安全組可以測試一下不加入云服務器是否無法連接,無法連接再加入也不遲。3.Xshell連接。首先需要準備的是,在騰訊云控制臺查看自己的公網IP地址,然后確定創建的SSH密鑰在本機的位置。3.1 打開Xshell 5軟件,在左上角點擊新建新建會話3.2 在新建會話的屬性中,名稱自定義,協議選擇SSH,主機填寫公網IP,端口號默認22,其他選項就可以先不用管了。新建會話的屬性3.3 填寫完之后點擊確認,在新彈出來的窗口中選擇創建的會話連接:選擇會話連接3.4 點擊連接后在新的窗口中輸入需要登錄的用戶名,默認一般為root,為了方便以后的登錄,最好勾選記住用戶名:輸入用戶名3.5 輸入用戶名,點擊確認后,會彈出輸入密碼的窗口。但是先森說過多次,騰訊云服務器的SSH服務默認關閉了密碼登錄,所以這時候我們需要用SSH密鑰文件驗證連接。在新的窗口中點擊瀏覽,再選擇用戶密鑰:用戶密鑰然后選擇導入,找到存放在本地的SSH密鑰,確認導入:導入密鑰3.6 導入密鑰之后點擊確定,在密鑰下拉欄中選擇剛才導入的密鑰。為了方便以后登錄,記得勾選右下角的記住密碼。接著直接點擊確認,不用輸入密碼。選擇密鑰3.7 選擇好密鑰確定之后,如果操作無誤就可以連接到服務器了,以后就可以方便的管理服務器了。連接成功總結本文算是顯示真實開始折騰服務器的一個開篇,培訓了那么就的Linux終于也開始正式用于實踐操作了。本文只是做一個記錄,就這個教程而言太過小白了,各位前輩肯定是用不上的,希望能夠幫助到一些比我還白的小白吧。
系統運維, 經驗雜筆.htaccess原來如此有用
近期幫助一位站長解決了網站無法訪問的問題, 顯示錯誤“The requested URL '/' was not found on this server.( 請求的URL(對象)在服務器找不到 )”。結果,原因僅僅是因為網站根目錄沒有.htaccess文件。.htaccess文件就此,先森開始重新認識.htaccess文件。發現其實先森本站上對.htaccess的運用所發布的文章都已經有幾篇了:虛擬主機屏蔽IP地址或IP段的方法忘給主域名解析后對301跳轉的一些研究Apache上WordPress免插件生成適應360站長平臺sitemap.xml的php代碼認識.htaccess.htaccess的運用竟然如此之多,先森不禁有點吃驚。趕緊百度安利一波關于htaccess文件的知識。htaccess文件是Apache服務器中的一個配置文件,它負責相關目錄下的網頁配置。通過htaccess文件,可以幫我們實現:網頁301重定向、自定義404錯誤頁面、改變文件擴展名、允許/阻止特定的用戶或者目錄的訪問、禁止目錄列表、配置默認文檔等功能。大部分的主機供應商都支持自定義,htaccess文件,先森使用的阿里云虛擬主機,.htaccess文件還是自己上傳的。建站初期,我們只需要有個.htaccess文件存在即可,里面放些初始配置語句即可:<IfModule mod_rewrite.c>RewriteEngine OnRewriteBase /RewriteRule ^index\.php$ - [L]RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule . /index.php [L]</IfModule>其實很簡單的就可以看出,上面這段初始配置中,就包括了定義index.php文件為首頁默認文件的相關配置,這也就是那位站長網站不能訪問的原因了。先森上面提到的三篇文章就分別使用了允許/阻止特定的用戶或者目錄的訪問、網頁301重定向、改變文件擴展名的功能,.htaccess的功能可謂非常強大。在使用虛機不能接觸.conf配置文件的情況下,.htaccess能給我們提供不小的便利。一些雜談先森培訓紅帽Linux,在培訓到RHCE的時候,終于接觸到Apache的配置了。老師教了我們如何在服務端主機上配置虛擬主機,自然接觸到了自定義配置文件。自定義配置文件是在/etc/httpd/conf.d/下,隨便創建一個以.conf結尾的文件即可。其中涉及到的301重定向和禁止訪問,先森看那些配置語句,是越看越熟悉,原來和.htaccess的是一樣的。先森曾經對WordPress緩存插件WP Super Cache的工作方式產生了疑問,它是如何訪客訪問的頁面是其保存在另一個文件夾內的文件的呢,明明沒有跳轉什么的?先森鉆了很久的牛角尖,而后頓悟,在其設置中有寫入.htaccess的規則,就是這些規則讓訪問的鏈接與其緩存文件對應。不過htaccess再怎么有用,它也只是分布式配置文件,要是httpd.conf中把開關一關,它也就沒用了。所以有條件的還是直接折騰服務器的配置文件吧,這樣更有意思。如果你還是一名在校大學生,可以試試騰訊云的學生機:直播了一段用騰訊云校園計劃1元購買免費域名+專享服務器及安全認證

川公網安備 51011202000104號