這幾天對服務器興趣賊為濃厚,在虛擬機上裝了一個centos7玩了玩,遇到過很多問題,比如網卡驅動設置,不能ping 等等問題,然后掏錢買個ecs搭服務器玩玩,下面就開始謝謝我的心路歷程吧。
首先
買服務器,什么阿里云,百度云、騰訊云等等,隨便買一個低配就好了,我買的學生機,9.9一個月,便宜的不能再便宜了,廉價的不能再廉價了。
(自帶mysql數據庫,php apache運行環境,ftp,vsftpd,這讓我省了很多事)
第一步:安裝jdk
去官網下載jdk(官網:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
rz,上傳jdk,(比如我的目錄是/usr/java)
然后解壓jdk:tar -zxvf jdk-8u141-linux-x64.tar.gz
接下來配置環境變量,環境變量路徑:/etc/profile ?。梢韵萩opy一份,cp /etc/profile /etc/profile1)
vi /etc/profile 找到export,添加如下內容
export java_home=/usr/java/jdk/jdk1.8.0_112
export jre_home=/usr/java/jdk/jdk1.8.0_112/jre
export classpath=.:$java_home/lib:$jre_home/lib:$classpath
export path=$java_home/bin:$jre_home/bin:$java_home:$path?。╬s:根據各字的jdk版本稍加修改,后面不做闡述了哈)
zz保存,然后輸入命令:source /etc/profile。
ok,jdk配置完成。
第二步:安裝tomcat
學過java的不用說,服務器不可少,還是老樣子,上官網下載壓縮包(官網:http://tomcat.apache.org/download-90.cgi)
rz,上傳壓縮包(比如我的上傳路徑是:/home)
然后解壓:tar -zxvf apache-tomcat-9.0.0.m22.tar.gz
啟動tomcat 方法一:進入該目錄,./startup.sh。方法二:路徑./startup.sh,比如:/home/apache-tomcat-9.0.0.m22/bin/./startup.sh
關閉tomcat 方法一:進入該目錄,./shutdown.sh。方法二:路徑./shutdown.sh,比如:/home/apache-tomcat-9.0.0.m22/bin/./shutdown.sh
修改端口號在 ......../tomcat/conf/server.xml
現在我們可以啟動tomcat來看看是否配置成功了,啟動tomcat,在瀏覽器輸入http://ip:端口號(http://59.110.158.250:8080)
當然,不會有那么想象中那么順利,因為這還有一個重要的安全組,我們打開控制臺,點配置規則
3389、22、-1,都是系統給配置好的,3306,雖然自帶數據庫,但是外部并不能訪問,要把3306端口在安全組放開才能訪問,如果放開了還不能訪問,那就是要mysql的權限問題了,可以上網搜搜相關教程,http的80端口毋庸置疑是必須打開的,https的443端口我也打開了,還有nginx的90端口,為什么是90端口?因為我在前面說了,自帶php apache的運行環境,端口號為80,如果nginx也是80的話會造成端口號沖突。8080就是大家都熟悉的8080端口了。(詳細安全組參考:https://help.aliyun.com/document_detail/25475.html)端口號開放了,那么我們的tomcat服務器就搞定了,只要把相應的項目打成war包部署到webapps目錄下即可。
ok,我們的服務器也配完了, 接下來配nginx吧。
第三步:安裝并配置nginx
進入:/usr/java/nginx位置
下載nginx: wget http://nginx.org/download/nginx-1.8.0.tar.gz
下載openssl : wget http://www.openssl.org/source/openssl-fips-2.0.9.tar.gz
下載zlib : wget http://zlib.net/zlib-1.2.8.tar.gz
下載pcre : wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz
(如果上面的包找不到,那就在自己電腦上下載然后上傳到服務器即可,比如我的nginx是我自己下的版本nginx1.12.1,官網:http://nginx.org/en/download.html)
(nginx1.12.1:http://nginx.org/download/nginx-1.12.1.tar.gz)
如果沒有安裝c++編譯環境,還得安裝,通過yum install gcc-c++完成安裝
下一步,編譯安裝
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
____________________________________________________________________________________ openssl : [root@localhost] tar zxvf openssl-fips-2.0.9. tar .gz [root@localhost] cd openssl-fips-2.0.9 [root@localhost] . /config && make && make install _____________________________________________________________________________________ pcre: [root@localhost] tar zxvf pcre-8.36. tar .gz [root@localhost] cd pcre-8.36 [root@localhost] . /configure && make && make install _____________________________________________________________________________________ zlib: [root@localhost] tar zxvf zlib-1.2.8. tar .gz [root@localhost] cd zlib-1.2.8 [root@localhost] . /configure && make && make install _____________________________________________________________________________________ 最后安裝nginx [root@localhost] tar zxvf nginx-1.8.0. tar .gz [root@localhost] cd nginx-1.8.0 [root@localhost] . /configure && make && make install _______________________________________________________________________________________ 啟動nginx /usr/local/nginx/sbin/nginx |
如果啟動不成功因為端口號沖突,修改已經存在的80端口或者修改nginx的80端口,(注意:修改nginx端口不是在/usr/java/nginx位置,而是在/usr/local/nginx/conf/nginx.conf)
啟動成功之后,我們可以在瀏覽器訪問,看看是否成功配置nginx
我們的nginx配置成功,關于nginx負載均衡參考我的上一篇博文,這里我詳細說一下nginx配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
|
######nginx配置文件nginx.conf中文詳解##### #定義nginx運行的用戶和用戶組 user www www; #nginx進程數,建議設置為等于cpu總核心數。 worker_processes 8; #全局錯誤日志定義類型,[ debug | info | notice | warn | error | crit ] error_log /usr/local/nginx/logs/error .log info; #進程pid文件 pid /usr/local/nginx/logs/nginx .pid; #指定進程可以打開的最大描述符:數目 #工作模式與連接數上限 #這個指令是指當一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與nginx進程數相除,但是nginx分配請求并不是那么均勻,所以最好與ulimit -n 的值保持一致。 #現在在linux 2.6內核下開啟文件打開數為65535,worker_rlimit_nofile就相應應該填寫65535。 #這是因為nginx調度時分配請求到進程并不是那么的均衡,所以假如填寫10240,總并發量達到3-4萬時就有進程可能超過10240了,這時會返回502錯誤。 worker_rlimit_nofile 65535; events { #參考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型 #是linux 2.6以上版本內核中的高性能網絡i/o模型,linux建議epoll,如果跑在freebsd上面,就用kqueue模型。 #補充說明: #與apache相類,nginx針對不同的操作系統,有不同的事件模型 #a)標準事件模型 #select、poll屬于標準事件模型,如果當前系統不存在更有效的方法,nginx會選擇select或poll #b)高效事件模型 #kqueue:使用于freebsd 4.1+, openbsd 2.9+, netbsd 2.0 和 macos x.使用雙處理器的macos x系統使用kqueue可能會造成內核崩潰。 #epoll:使用于linux內核2.6版本及以后的系統。 #/dev/poll:使用于solaris 7 11/99+,hp/ux 11.22+ (eventport),irix 6.5.15+ 和 tru64 unix 5.1a+。 #eventport:使用于solaris 10。 為了防止出現內核崩潰的問題, 有必要安裝安全補丁。 use epoll; #單個進程最大連接數(最大連接數=連接數*進程數) #根據硬件調整,和前面工作進程配合起來用,盡量大,但是別把cpu跑到100%就行。每個進程允許的最多連接數,理論上每臺nginx服務器的最大連接數為。 worker_connections 65535; #keepalive超時時間。 keepalive_timeout 60; #客戶端請求頭部的緩沖區大小。這個可以根據你的系統分頁大小來設置,一般一個請求頭的大小不會超過1k,不過由于一般系統分頁都要大于1k,所以這里設置為分頁大小。 #分頁大小可以用命令getconf pagesize 取得。 #[root@web001 ~]# getconf pagesize #4096 #但也有client_header_buffer_size超過4k的情況,但是client_header_buffer_size該值必須設置為“系統分頁大小”的整倍數。 client_header_buffer_size 4k; #這個將為打開文件指定緩存,默認是沒有啟用的,max指定緩存數量,建議和打開文件數一致,inactive是指經過多長時間文件沒被請求后刪除緩存。 open_file_cache max=65535 inactive=60s; #這個是指多長時間檢查一次緩存的有效信息。 #語法:open_file_cache_valid time 默認值:open_file_cache_valid 60 使用字段:http, server, location 這個指令指定了何時需要檢查open_file_cache中緩存項目的有效信息. open_file_cache_valid 80s; #open_file_cache指令中的inactive參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打開的,如上例,如果有一個文件在inactive時間內一次沒被使用,它將被移除。 #語法:open_file_cache_min_uses number 默認值:open_file_cache_min_uses 1 使用字段:http, server, location 這個指令指定了在open_file_cache指令無效的參數中一定的時間范圍內可以使用的最小文件數,如果使用更大的值,文件描述符在cache中總是打開狀態. open_file_cache_min_uses 1; #語法:open_file_cache_errors on | off 默認值:open_file_cache_errors off 使用字段:http, server, location 這個指令指定是否在搜索一個文件是記錄cache錯誤. open_file_cache_errors on; } #設定http服務器,利用它的反向代理功能提供負載均衡支持 http { #文件擴展名與文件類型映射表 include mime.types; #默認文件類型 default_type application /octet-stream ; #默認編碼 #charset utf-8; #服務器名字的hash表大小 #保存服務器名字的hash表是由指令server_names_hash_max_size 和server_names_hash_bucket_size所控制的。參數hash bucket size總是等于hash表的大小,并且是一路處理器緩存大小的倍數。在減少了在內存中的存取次數后,使在處理器中加速查找hash表鍵值成為可能。如果hash bucket size等于一路處理器緩存的大小,那么在查找鍵的時候,最壞的情況下在內存中查找的次數為2。第一次是確定存儲單元的地址,第二次是在存儲單元中查找鍵 值。因此,如果nginx給出需要增大hash max size 或 hash bucket size的提示,那么首要的是增大前一個參數的大小. server_names_hash_bucket_size 128; #客戶端請求頭部的緩沖區大小。這個可以根據你的系統分頁大小來設置,一般一個請求的頭部大小不會超過1k,不過由于一般系統分頁都要大于1k,所以這里設置為分頁大小。分頁大小可以用命令getconf pagesize取得。 client_header_buffer_size 32k; #客戶請求頭緩沖大小。nginx默認會用client_header_buffer_size這個buffer來讀取header值,如果header過大,它會使用large_client_header_buffers來讀取。 large_client_header_buffers 4 64k; #設定通過nginx上傳文件的大小 client_max_body_size 8m; #開啟高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對于普通應用設為 on,如果用來進行下載等應用磁盤io重負載應用,可設置為off,以平衡磁盤與網絡i/o處理速度,降低系統的負載。注意:如果圖片顯示不正常把這個改成off。 #sendfile指令指定 nginx 是否調用sendfile 函數(zero copy 方式)來輸出文件,對于普通應用,必須設為on。如果用來進行下載等應用磁盤io重負載應用,可設置為off,以平衡磁盤與網絡io處理速度,降低系統uptime。 sendfile on; #開啟目錄列表訪問,合適下載服務器,默認關閉。 autoindex on; #此選項允許或禁止使用socke的tcp_cork的選項,此選項僅在使用sendfile的時候使用 tcp_nopush on; tcp_nodelay on; #長連接超時時間,單位是秒 keepalive_timeout 120; #fastcgi相關參數是為了改善網站的性能:減少資源占用,提高訪問速度。下面參數看字面意思都能理解。 fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; #gzip模塊設置 gzip on; #開啟gzip壓縮輸出 gzip_min_length 1k; #最小壓縮文件大小 gzip_buffers 4 16k; #壓縮緩沖區 gzip_http_version 1.0; #壓縮版本(默認1.1,前端如果是squid2.5請使用1.0) gzip_comp_level 2; #壓縮等級 gzip_types text /plain application /x-javascript text /css application /xml ; #壓縮類型,默認就已經包含textml,所以下面就不用再寫了,寫上去也不會有問題,但是會有一個warn。 gzip_vary on; #開啟限制ip連接數的時候需要使用 #limit_zone crawler $binary_remote_addr 10m; #負載均衡配置 upstream piao.jd.com { #upstream的負載均衡,weight是權重,可以根據機器配置定義權重。weigth參數表示權值,權值越高被分配到的幾率越大。 server 192.168.80.121:80 weight=3; server 192.168.80.122:80 weight=2; server 192.168.80.123:80 weight=3; #nginx的upstream目前支持4種方式的分配 #1、輪詢(默認) #每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。 #2、weight #指定輪詢幾率,weight和訪問比率成正比,用于后端服務器性能不均的情況。 #例如: #upstream bakend { # server 192.168.0.14 weight=10; # server 192.168.0.15 weight=10; #} #2、ip_hash #每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。 #例如: #upstream bakend { # ip_hash; # server 192.168.0.14:88; # server 192.168.0.15:80; #} #3、fair(第三方) #按后端服務器的響應時間來分配請求,響應時間短的優先分配。 #upstream backend { # server server1; # server server2; # fair; #} #4、url_hash(第三方) #按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。 #例:在upstream中加入hash語句,server語句中不能寫入weight等其他的參數,hash_method是使用的hash算法 #upstream backend { # server squid1:3128; # server squid2:3128; # hash $request_uri; # hash_method crc32; #} #tips: #upstream bakend{#定義負載均衡設備的ip及設備狀態}{ # ip_hash; # server 127.0.0.1:9090 down; # server 127.0.0.1:8080 weight=2; # server 127.0.0.1:6060; # server 127.0.0.1:7070 backup; #} #在需要使用負載均衡的server中增加 proxy_pass http://bakend/; #每個設備的狀態設置為: #1.down表示單前的server暫時不參與負載 #2.weight為weight越大,負載的權重就越大。 #3.max_fails:允許請求失敗的次數默認為1.當超過最大次數時,返回proxy_next_upstream模塊定義的錯誤 #4.fail_timeout:max_fails次失敗后,暫停的時間。 #5.backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。 #nginx支持同時設置多組的負載均衡,用來給不用的server來使用。 #client_body_in_file_only設置為on 可以講client post過來的數據記錄到文件中用來做debug #client_body_temp_path設置記錄文件的目錄 可以設置最多3層目錄 #location對url進行匹配.可以進行重定向或者進行新的代理 負載均衡 } #虛擬主機的配置 server { #監聽端口 listen 80; #域名可以有多個,用空格隔開 server_name www.jd.com jd.com; index index.html index.htm index.php; root /data/www/jd ; #對******進行負載均衡 location ~ .*.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } #圖片緩存時間設置 location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ { expires 10d; } #js和css緩存時間設置 location ~ .*.(js|css)?$ { expires 1h; } #日志格式設定 #$remote_addr與$http_x_forwarded_for用以記錄客戶端的ip地址; #$remote_user:用來記錄客戶端用戶名稱; #$time_local: 用來記錄訪問時間與時區; #$request: 用來記錄請求的url與http協議; #$status: 用來記錄請求狀態;成功是200, #$body_bytes_sent :記錄發送給客戶端文件主體內容大??; #$http_referer:用來記錄從那個頁面鏈接訪問過來的; #$http_user_agent:記錄客戶瀏覽器的相關信息; #通常web服務器放在反向代理的后面,這樣就不能獲取到客戶的ip地址了,通過$remote_add拿到的ip地址是反向代理服務器的ip地址。反向代理服務器在轉發請求的http頭信息中,可以增加x_forwarded_for信息,用以記錄原有客戶端的ip地址和原來客戶端的請求的服務器地址。 log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for' ; #定義本虛擬主機的訪問日志 access_log /usr/local/nginx/logs/host .access.log main; access_log /usr/local/nginx/logs/host .access.404.log log404; #對 "/" 啟用反向代理 location / { proxy_pass http: //127 .0.0.1:88; proxy_redirect off; proxy_set_header x-real-ip $remote_addr; #后端的web服務器可以通過x-forwarded-for獲取用戶真實ip proxy_set_header x-forwarded- for $proxy_add_x_forwarded_for; #以下是一些反向代理的配置,可選。 proxy_set_header host $host; #允許客戶端請求的最大單文件字節數 client_max_body_size 10m; #緩沖區代理緩沖用戶端請求的最大字節數, #如果把它設置為比較大的數值,例如256k,那么,無論使用firefox還是ie瀏覽器,來提交任意小于256k的圖片,都很正常。如果注釋該指令,使用默認的client_body_buffer_size設置,也就是操作系統頁面大小的兩倍,8k或者16k,問題就出現了。 #無論使用firefox4.0還是ie8.0,提交一個比較大,200k左右的圖片,都返回500 internal server error錯誤 client_body_buffer_size 128k; #表示使nginx阻止http應答代碼為400或者更高的應答。 proxy_intercept_errors on; #后端服務器連接的超時時間_發起握手等候響應超時時間 #nginx跟后端服務器連接超時時間(代理連接超時) proxy_connect_timeout 90; #后端服務器數據回傳時間(代理發送超時) #后端服務器數據回傳時間_就是在規定時間之內后端服務器必須傳完所有的數據 proxy_send_timeout 90; #連接成功后,后端服務器響應時間(代理接收超時) #連接成功后_等候后端服務器響應時間_其實已經進入后端的排隊之中等候處理(也可以說是后端服務器處理請求的時間) proxy_read_timeout 90; #設置代理服務器(nginx)保存用戶頭信息的緩沖區大小 #設置從被代理服務器讀取的第一部分應答的緩沖區大小,通常情況下這部分應答中包含一個小的應答頭,默認情況下這個值的大小為指令proxy_buffers中指定的一個緩沖區的大小,不過可以將其設置為更小 proxy_buffer_size 4k; #proxy_buffers緩沖區,網頁平均在32k以下的設置 #設置用于讀取應答(來自被代理服務器)的緩沖區數目和大小,默認情況也為分頁大小,根據操作系統的不同可能是4k或者8k proxy_buffers 4 32k; #高負荷下緩沖大?。╬roxy_buffers*2) proxy_busy_buffers_size 64k; #設置在寫入proxy_temp_path時數據的大小,預防一個工作進程在傳遞文件時阻塞太長 #設定緩存文件夾大小,大于這個值,將從upstream服務器傳 proxy_temp_file_write_size 64k; } #設定查看nginx狀態的地址 location /nginxstatus { stub_status on; access_log on; auth_basic "nginxstatus" ; auth_basic_user_file confpasswd; #htpasswd文件的內容可以用apache提供的htpasswd工具來產生。 } #本地動靜分離反向代理配置 #所有jsp的頁面均交由tomcat或resin處理 location ~ .(jsp|jspx| do )?$ { proxy_set_header host $host; proxy_set_header x-real-ip $remote_addr; proxy_set_header x-forwarded- for $proxy_add_x_forwarded_for; proxy_pass http: //127 .0.0.1:8080; } #所有靜態文件由nginx直接讀取不經過tomcat或resin location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt| pdf|xls|mp3|wma)$ { expires 15d; } location ~ .*.(js|css)?$ { expires 1h; } } } ######nginx配置文件nginx.conf中文詳解##### |
趕快去搭建屬于你自己的服務器吧!