如何在ubuntu 16.04 上安裝Nginx

2017年12月9日 4 條評論

概述

Nginx 是世界上最受歡迎的web服務器,許多大流量的主機都采用Nginx作為服務器。在大多數場景下作為web服務器的Nginx比Apache更加節省資源,它也可當作反向代理服務器。

本文主要介紹如何在ubuntu16.04上安裝Nginx

前提條件

開始以前,你需要有一個安裝好的ubuntu16.04,并且你需要有一個擁有sudo權限的非root普通用戶。

第一步:安裝Nginx

Ubuntu默認的源中就有Nginx,所以安裝是比較簡單的。

首先,更新apt源,以便軟件是最新的,然后就可以安裝nginx:

  • sudo apt-get update
  • sudo apt-get install nginx

執行這兩個命令之后,apt-get就會安裝好Nginx和它依賴的軟件。

第二步:配置防火墻

開始測試Nginx前,我們需要配置防火墻,以便允許外界訪問nginx服務。Nginx在安裝的時候使用ufw注冊自己作為一個服務,這樣對nginx的訪問就會變得很容易。

顯示所有ufw應用的配置:

sudo ufw app list

你可以得到一個配置的輸出列表:

我們可以看到,有三個Nginx的配置:

  • Nginx Full: 這個配置打開 80端口和443端口
  • Nginx HTTP: 這個配置只打開80 (普通, 未加密通信)
  • Nginx HTTPS: 這個配置只打開 443 (TLS/SSL 加密通信 )

一般來說我們應該配置最嚴的限制,因為本文我們還沒有配置SSL,所以我們只打開80端口。

我們執行:

驗證修改狀態:

我們可以看到HTTP是被打開的:

第三步: 檢查你的web server

安裝完成后,Ubuntu 16.04 會自動啟動 Nginx. 我們可以使用systemd?檢查運行狀態:

輸出

服務已經正常啟動,當然最好的確認方法是通過訪問web頁面的方式。

如果我們能訪問到默認加載頁就證明啟動成功了。

如果你不知道服務器的ip可以使用如下命令:

 

有了IP之后,在瀏覽器里輸入:

http://server_domain_or_IP

你就能看到Nginx的默認加載頁了:

Nginx default page

第四步: 管理 Nginx 進程

現在我們已經有nginx在運行了,我們可以再試一些管理命令:

停止nginx:

啟動nginx:

重啟nginx:

修改配置文件后,平滑加載配置命令(不會斷開用戶訪問):

默認,nginx是隨著系統啟動的時候自動運行。如果你不想開機啟動,那么你可以禁止nginx開機啟動:

重新配置nginx開機自動啟動:

第五步: 熟悉Nginx的文件和目錄

現在我們已經管理nginx了,接下來可以熟悉一下nginx的目錄結構和一些重要的文件:

網站文件位置

      • /var/www/html: 網站文件存放的地方, 默認只有我們上面看到nginx頁面,可以通過改變nginx配置文件的方式來修改這個位置。

服務器配置

      • /etc/nginx: nginx配置文件目錄。所有的nginx配置文件都在這里。
      • /etc/nginx/nginx.conf: Nginx的主配置文件. 可以修改他來改變nginx的全局配置。
      • /etc/nginx/sites-available/: 這個目錄存儲每一個網站的"server blocks"。nginx通常不會使用這些配置,除非它們陪連接到 ?sites-enabled?目錄 (see below)。一般所有的server block 配置都在這個目錄中設置,然后軟連接到別的目錄 。
      • /etc/nginx/sites-enabled/: 這個目錄存儲生效的 "server blocks" 配置. 通常,這個配置都是鏈接到 sites-available目錄中的配置文件
      • /etc/nginx/snippets: 這個目錄主要可以包含在其它nginx配置文件中的配置片段。重復的配置都可以重構為配置片段。

日志文件

    • /var/log/nginx/access.log: 每一個訪問請求都會記錄在這個文件中,除非你做了其它設置。
    • /var/log/nginx/error.log: 任何Nginx的錯誤信息都會記錄到這個文件中。
分類: nginx 標簽: ,

蘋果ios同步icloud照片到新手機

2017年11月15日 沒有評論

換了個新手機,想把icloud里面的照片下來。一直也沒搞懂蘋果的更新機制。

設置的是通過icloud恢復,結果發現沒有可用備份。那只能設置為新手機了。

設為新手機后使用已有的icloud賬戶登錄后,以前通訊錄,照片會自動恢復。

設置方式是:照片需要打開 設置->照片->icloud照片圖庫

打開照片后發現里還是沒有照片,網上查了查也看不到什么原理。

最后無意間發現照片有了。

原來是要想同步照片需要三個條件:
1.需要打開icloud照片圖庫
2.手機接入wifi
3.手機充電狀態是。

才會下載照片到新手機。

分類: iOS/Mac 標簽: ,

git skip worktree文件恢復

2017年10月20日 1 條評論

從遠程pull文件一致報error: Your local changes to the following files would be overwritten by merge:
提示有文件未commit,可是本地已經無文件可,后來發現提示未提交這些文件都是skip worktre文件,需要恢復取消skipwork狀態,然后暫存本地的修改,再進行pull遠程文件就可以了。

把所有標記為skip worktree的問價取消標記命令:

git ls-files -v 顯示所有文件的狀態
grep -i ^S cut -c 3- 提取從第三個字符開始到結尾,去掉狀態只保留路徑
tr '\012' '\000'替換換行符 (\012) 為 (\000)
xargs -0 git update-index --no-skip-worktree 把以0分割的路徑字符傳給 git update-index --no-skip-worktree 取消

忽略修改,從而不用提交到庫里面。
git update-index --assume-unchanged /path/file

如果想恢復該文件,可以用
git update-index --no-assume-unchanged /path/file 來恢復跟蹤

分類: 小技巧 標簽:

TCP連接建立的三次握手與連接斷開四次揮手

2017年9月4日 沒有評論

TCP三次握手

一、什么是三次握手

三次握手(Three-way Handshake),是指建立一個TCP連接時,需要客戶端和服務器總共發送3個包。

二、三次握手的目的

三次握手的目的是連接服務器指定端口,建立TCP連接,并同步連接雙方的序列號和確認號并交換 TCP 窗口大小信息。客戶端執行連接請求時。將觸發三次握手。

三、三次握手過程

第一次握手:
客戶端發送一個TCP的SYN標志位置1的包指明客戶打算連接的服務器的端口,以及初始序號X,保存在包頭的序列號(Sequence Number)字段里。
第二次握手:
服務器發回確認包(ACK)應答。即SYN標志位和ACK標志位均為1同時,將確認序號(Acknowledgement Number)設置為客戶的ISN加1以.即X+1。
第三次握手.
客戶端再次發送確認包(ACK) SYN標志位為0,ACK標志位為1。如果正確則連接建立成功,客戶端和服務器進入ESTABLISHED狀態,完成三次握手,隨后客戶端與服務器之間可以開始傳輸數據了。把服務器發來ACK的序號字段+1,放在確定字段中發送給對方.并且在數據段放寫ISN的+1。

TCP四次揮手

一、什么是四次揮手

TCP的連接的拆除需要發送四個包,因此稱為四次揮手(four-way handshake)。客戶端或服務器均可主動發起揮手動作,任何一方執行close操作即可產生揮手操作。

二、四次揮手過程

第一次揮手:

客戶端發送一個FIN,用來關閉客戶端到服務器的數據傳送,客戶機進入FIN_WAIT_1狀態。
第二次揮手:

服務器收到FIN后,發送一個ACK給客戶端,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號),服務器進入CLOSE_WAIT狀態。
第三次揮手:

服務器發送一個FIN,用來關閉服務器到客戶端的數據傳送,服務器進入LAST_ACK狀態。
第四次揮手:

客戶端收到FIN后,客戶端進入TIME_WAIT狀態,接著發送一個ACK給服務器,確認序號為收到序號+1,服務器進入CLOSED狀態,完成四次揮手。

有限狀態機FSM:Finite State Machine
1、CLOSED 沒有任何連接狀態
2、LISTEN 偵聽狀態,等待來自遠方TCP端口的連接請求
3 、SYN-SENT 在發送連接請求后,等待對方確認
4、SYN-RECEIVED 在收到和發送一個連接請求后,等待對方確認
5、ESTABLISHED 代表傳輸連接建立,雙方進入數據傳送狀態
6、FIN-WAIT-1 主動關閉,主機已發送關閉連接請求,等待對方確認
7 、FIN-WAIT-2 主動關閉,主機已收到對方關閉傳輸連接確認,等待對方發送關閉傳輸連接請求
8、 TIME-WAIT 完成雙向傳輸連接關閉,等待所有分組消失
9、CLOSE-WAIT 被動關閉,收到對方發來的關閉連接請求,并已確認
10、LAST-ACK 被動關閉,等待最后一個關閉傳輸連接確認,并等待所有分組消失

11、CLOSING 雙方同時嘗試關閉傳輸連接,等待對方確認

附加問題:

【問題1】為什么連接的時候是三次握手,關閉的時候卻是四次揮手?
答:因為當服務器收到客戶端的SYN連接請求報文后,可以直接發送SYN+ACK報文。其中ACK報文是用來回應的,SYN報文是用來同步的。但是關閉連接時,當服務器收到FIN報文時,很可能并不會立即關閉SOCKET,所以只能先回復一個ACK報文,告訴客戶端,”發送的FIN報文已經收到”。只有等到客戶端所有的報文都發送完了,客戶端才能發送FIN報文,因此不能一起發送。故需要四步揮手。
【問題2】為什么TIME_WAIT狀態需要經過2MSL(最大報文段生存時間)才能返回到CLOSE狀態?
答:四個報文都發送完畢,客戶端和服務器可以直接進入CLOSE狀態了,但有可能最后一個ACK丟失。所以TIME_WAIT狀態就是用來重發可能丟失的ACK報文,確保之前的數據不會丟失后再進入close狀態。

原文:http://www.178linux.com/85976

分類: 網絡編程 標簽:

tcpdump抓取http的請求頭和響應信息

2017年8月21日 沒有評論

tcpdump過濾HTTP的GET請求:

sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

tcpdump過濾HTTP的POST請求:

sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'

tcpdump過濾HTTP的請求和響應頭信息,以及請求和響應消息體信息:

tcpdump -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
tcpdump -X -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

分類: linux 標簽:

The listener supports no services

2017年8月14日 1 條評論

[[email protected] ~]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 14-AUG-2017 13:56:45

Copyright (c) 1991, 2013, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 14-AUG-2017 13:54:44
Uptime 0 days 0 hr. 2 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /home/oracle/product/11gR2/network/admin/listener.ora
Listener Log File /home/oracle/product/diag/tnslsnr/localhost/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully

tlister啟動沒有服務

#netmgr
在database services下增加實例名配置,替換紅色部分為你的實例名。

客戶端連接報錯:
ORA-12541:TNS:no listener
把127.0.0.1 替換為你機器的ip

分類: oracle 標簽:

oralce刪除數據庫

2017年8月14日 沒有評論

sqlplus / as sysdba
SQL> startup
ORACLE instance started.

Total System Global Area 2.0176E+10 bytes
Fixed Size 2261928 bytes
Variable Size 2818575448 bytes
Database Buffers 1.7314E+10 bytes
Redo Buffers 41463808 bytes
Database mounted.
Database opened.
SQL> alter database close;

Database altered.

SQL> alter system enable restricted session;

System altered.

SQL> drop database;

Database dropped.

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With

刪除 /etc/oratab
刪除 rm -rf product/
刪除 rm -rf oraInventory/

未關閉的進程殺掉
[[email protected] ~]# ps -ef|grep ora
root 4736 3961 0 13:17 pts/2 00:00:00 su - oracle
oracle 4737 4736 0 13:17 pts/2 00:00:00 -bash
oracle 4763 1 0 13:18 ? 00:00:00 /home/oracle/product/11gR2/bin/tnslsnr LISTENER -inherit
root 5482 3790 0 13:36 pts/1 00:00:00 grep ora
[[email protected] ~]# kill -9 4763

這樣重新安裝數據庫,不會報實例沖突

分類: oracle 標簽:

eclipse工程有紅色嘆號

2017年7月11日 沒有評論

eclipse有紅色嘆號;

一般情況可以這樣處理,處理方法來自網絡

1,右鍵項目名稱 BuildPath ---> Configure Build Paht...中,然后上面有幾個選項卡找到 Libraries中出現紅色叉號的包為路徑錯誤的包。到classpath中修改相應包的當前路徑。然后回到eclipse中F5刷新工程。

不行的話可以試試clean項目;

project--->clean

如果你的eclipse項目有紅色嘆號,而Libraries中沒有出現紅色叉號的包,我是這樣做的。

1,先把eclipse轉換到Markers視圖,windows---->show view ---->markers

你會發現這些報錯內容,
Archive for required library: ‘XXXXXXXX001’ in project ‘xxxxxxxxx’ cannot be read or is not a valid ZIP file
2,用記事本打開項目根目錄的.classpath文件,找到“”這一行,刪掉

保存,刷新后,這個報錯就沒有了,從而紅色嘆號也沒有了。

分類: java 標簽:

word按tab不能多級標題

2017年7月5日 沒有評論

使用word 2010 ,經常用到tab鍵進行列表等級變換,但是在某些情況下,tab鍵不能回退到下一級,那么就需要修復word此功能。
1第一步,打開word 2010 ,選擇“文件”-> “選項”:
2第二步,在彈出框中選擇“校對”,然后選擇“自動更正選項(A)...”:
3第三步,在彈出框中選擇“鍵入時自動套用格式”標簽卡,在“用Tab和Backspace設置左縮進和首行縮進”前打勾:
4最后,保存退出

分類: 小技巧 標簽:

nginx的location、root、alias指令用法和區別

2017年4月4日 7 條評論

nginx指定文件路徑有兩種方式root和alias,指令的使用方法和作用域:
[root]
語法:root path
默認值:root html
配置段:http、server、location、if
[alias]
語法:alias path
配置段:location

root與alias主要區別在于nginx如何解釋location后面的uri,這會使兩者分別以不同的方式將請求映射到服務器文件上。
root的處理結果是:root路徑+location路徑
alias的處理結果是:使用alias路徑替換location路徑
alias是一個目錄別名的定義,root則是最上層目錄的定義。
還有一個重要的區別是alias后面必須要用“/”結束,否則會找不到文件的。。。而root則可有可無~~

root實例:

如果一個請求的URI是/t/a.html時,web服務器將會返回服務器上的/www/root/html/t/a.html的文件。

alias實例:

如果一個請求的URI是/t/a.html時,web服務器將會返回服務器上的/www/root/html/new_t/a.html的文件。注意這里是new_t,因為alias會把location后面配置的路徑丟棄掉,把當前匹配到的目錄指向到指定的目錄。

注意:
1. 使用alias時,目錄名后面一定要加"/"。
3. alias在使用正則匹配時,必須捕捉要匹配的內容并在指定的內容處使用。
4. alias只能位于location塊中。(root可以不放在location中)

分類: nginx 標簽:
极速快乐十分助手