Linux系統 WEB服務Nginx

NGINX 編譯安裝javascript

nginx安裝涉及pcre、zlib庫文件、openssl加密包安裝css

tar -zxvf pcre-8.38.tar.gz
cd pcre-8.38
./configure
make
make installhtml


tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make
make install前端


tar -zxvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure --sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--with-http_ssl_module \
--with-pcre=/usr/local/src/pcre-8.38 \
--with-zlib=/usr/local/src/zlib-1.2.11 \
--with-openssl=/usr/local/src/openssl-1.0.1t
make
make installjava

1、https服務
啓動nginx,查看nginx模塊,發現已經添加
/usr/local/nginx/sbin/nginx -V 
HTTPS實際上是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務端和客戶端的信息傳輸都會經過TLS進行加密,因此傳輸的數據都是加密後的數據
https協議原理
首先,客戶端與服務器創建鏈接,各自生成私鑰和公鑰,是不一樣的。服務器返給客戶端一個公鑰,而後客戶端拿着這個公鑰把要搜索的東西加密,稱之爲密文,並連並本身的公鑰一塊兒返回給服務器,服務器拿着本身的私鑰解密密文,而後把響應到的數據用客戶端的公鑰加密,返回給客戶端,客戶端拿着本身的私鑰解密密文,把數據呈現出來node

2、證書和私鑰的生成
注意:通常生成的目錄,應該放在nginx/conf/ssl目錄
1.建立服務器證書密鑰文件 server.key:
openssl genrsa -des3 -out server.key 1024
輸入密碼,確認密碼,本身隨便定義,可是要記住,後面會用到。
2.建立服務器證書的申請文件 server.csr
openssl req -new -key server.key -out server.csr
輸出內容爲:
Enter pass phrase for root.key: ← 輸入前面建立的密碼 
Country Name (2 letter code) [AU]:CN ← 國家代號,中國輸入CN 
State or Province Name (full name) [Some-State]:BeiJing ← 省的全名,拼音 
Locality Name (eg, city) []:BeiJing ← 市的全名,拼音 
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany Corp. ← 公司英文名 
Organizational Unit Name (eg, section) []: ← 能夠不輸入 
Common Name (eg, YOUR name) []: ← 此時不輸入 
Email Address []:admin@mycompany.com ← 電子郵箱,可隨意填
Please enter the following ‘extra’ attributes 
to be sent with your certificate request 
A challenge password []: ← 能夠不輸入 
An optional company name []: ← 能夠不輸入
4.備份一份服務器密鑰文件
cp server.key server.key.org
5.去除文件口令
openssl rsa -in server.key.org -out server.key
6.生成證書文件server.crt
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crtnginx

3、配置文件
1.下面爲配置文件 /usr/local/nginx/conf/vhost/daj.conf
server{
#比起默認的80 使用了443 默認 是ssl方式 多出default以後的ssl
listen 443 default ssl;
#default 可省略
#開啓 若是把ssl on;這行去掉,ssl寫在443端口後面。這樣http和https的連接均可以用
ssl on;
#證書(公鑰.發送到客戶端的)
ssl_certificate ssl/server.crt;
#私鑰,
ssl_certificate_key ssl/server.key;
#下面是綁定域名
server_name www.daj.com;
location / {
#禁止跳轉
proxy_redirect off;
#代理淘寶
proxy_pass https://www.tao.com/; 

}git


4、Nginx的配置文件nginx.conf配置詳解以下
#定義Nginx運行的用戶和用戶組
#user nobody;
#user sp_ctpsp;
#nginx進程數,建議設置爲等於CPU總核心數。
worker_processes 4;
#全局錯誤日誌定義類型,[ debug | info | notice | warn | error | crit ]
error_log /opt/app/ctpsp/nginx1.6.2/logs/error.log info;
error_log /opt/app/ctpsp/nginx1.6.2/logs/error.log error;
error_log /opt/app/ctpsp/nginx1.6.2/logs/error.log notice;
#進程文件
pid /opt/app/ctpsp/nginx1.6.2/nginx.pid;
#nginx保持的最大文件打開數量,應於系統保持一致。(生產上沒有配置)
worker_rlimit_nofile 65535;web

#工做模式與鏈接數上限
events {
#參考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本內核中的高性能網絡I/O模型,若是跑在FreeBSD上面,就用kqueue模型。
use epoll;
multi_accept on;
#單個進程最大鏈接數(最大鏈接數=鏈接數*進程數)
worker_connections 102400;
}算法

#設定http服務器
http {
include mime.types; #文件擴展名與文件類型映射表 
default_type application/octet-stream; #默認文件類型
#access_log logs/access.log main;
sendfile on; #開啓高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對於普通應用設爲 on,若是用來進行下載等應用磁
#定義nginx日誌格式
#tcp_nopush on;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
keepalive_timeout 65; #長鏈接超時時間,單位是秒

ssi on; #開啓ssi支持,默認是off
ssi_silent_errors on; #默認值是off,開啓後在處理SSI文件出錯時不輸出錯誤提示:」[an error occurred while processing the directive] 」
ssi_types text/shtml; #默認是ssi_types text/html,因此若是須要htm和html支持,則不須要設置這句,若是須要shtml支持,則須要設置:ssi_types text/shtml
#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; #壓縮類型,默認就已經包含text/html,因此下面就不用再寫了,寫上去也不會有問題,可是會有一個warn。
gzip_vary on;

日誌格式設置。
$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地址和原來客戶端的請求的服務器地址。

access_log logs/host.access.log main;
access_log logs/host.access.404.log log404;
用了log_format指令設置了日誌格式以後,須要用access_log指令指定日誌文件的存放路徑;

server_names_hash_bucket_size 128;
#保存服務器名字的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的提示,那麼首要的是增大前一個參數的大小.

client_header_buffer_size 4k;
客戶端請求頭部的緩衝區大小。這個能夠根據你的系統分頁大小來設置,通常一個請求的頭部大小不會超過1k,不過因爲通常系統分頁都要大於1k,因此這裏設置爲分頁大小。分頁大小能夠用命令getconf PAGESIZE取得。

large_client_header_buffers 8 128k;
客戶請求頭緩衝大小。nginx默認會用client_header_buffer_size這個buffer來讀取header值,若是
header過大,它會使用large_client_header_buffers來讀取。

open_file_cache max=102400 inactive=20s;
這個指令指定緩存是否啓用。
例: open_file_cache max=1000 inactive=20s; 
open_file_cache_valid 30s; 
open_file_cache_min_uses 2; 
open_file_cache_errors on;

open_file_cache_errors
語法:open_file_cache_errors on | off 默認值:open_file_cache_errors off 使用字段:http, server, location 這個指令指定是否在搜索一個文件是記錄cache錯誤.
open_file_cache_min_uses
語法:open_file_cache_min_uses number 默認值:open_file_cache_min_uses 1 使用字段:http, server, location 這個指令指定了在open_file_cache指令無效的參數中必定的時間範圍內可使用的最小文件數,若是使用更大的值,文件描述符在cache中老是打開狀態.
open_file_cache_valid
語法:open_file_cache_valid time 默認值:open_file_cache_valid 60 使用字段:http, server, location 這個指令指定了什麼時候須要檢查open_file_cache中緩存項目的有效信息.


client_max_body_size 300m;
設定經過nginx上傳文件的大小

sendfile on;
sendfile指令指定 nginx 是否調用sendfile 函數(zero copy 方式)來輸出文件,對於普通應用,必須設爲on。若是用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡IO處理速度,下降系統uptime。

tcp_nopush on;
此選項容許或禁止使用socke的TCP_CORK的選項,此選項僅在使用sendfile的時候使用

proxy_connect_timeout 90; 
後端服務器鏈接的超時時間_發起握手等候響應超時時間

proxy_read_timeout 180;
鏈接成功後_等候後端服務器響應時間_其實已經進入後端的排隊之中等候處理(也能夠說是後端服務器處理請求的時間)

proxy_send_timeout 180;
後端服務器數據回傳時間_就是在規定時間以內後端服務器必須傳完全部的數據

proxy_buffer_size 256k;
設置從被代理服務器讀取的第一部分應答的緩衝區大小,一般狀況下這部分應答中包含一個小的應答頭,默認狀況下這個值的大小爲指令proxy_buffers中指定的一個緩衝區的大小,不過能夠將其設置爲更小

proxy_buffers 4 256k;
設置用於讀取應答(來自被代理服務器)的緩衝區數目和大小,默認狀況也爲分頁大小,根據操做系統的不一樣多是4k或者8k

proxy_busy_buffers_size 256k;

proxy_temp_file_write_size 256k;
設置在寫入proxy_temp_path時數據的大小,預防一個工做進程在傳遞文件時阻塞太長

proxy_temp_path /data0/proxy_temp_dir;
proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區

proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
#設置內存緩存空間大小爲200MB,1天沒有被訪問的內容自動清除,硬盤緩存空間大小爲30GB。
keepalive_timeout 120;
keepalive超時時間。

tcp_nodelay on;

client_body_buffer_size 512k;
若是把它設置爲比較大的數值,例如256k,那麼,不管使用firefox仍是IE瀏覽器,來提交任意小於256k的圖片,都很正常。若是註釋該指令,使用默認的client_body_buffer_size設置,也就是操做系統頁面大小的兩倍,8k或者16k,問題就出現了。
不管使用firefox4.0仍是IE8.0,提交一個比較大,200k左右的圖片,都返回500 Internal Server Error錯誤

proxy_intercept_errors on;
表示使nginx阻止HTTP應答代碼爲400或者更高的應答。


#upstream的負載均衡,weight是權重,能夠根據機器配置定義權重。weigth參數表示權值,權值越高被分配到的概率越大。
upstream one.session.com { 
ip hash; #使用hash算法進行輪詢負載
server 172.28.41.249:8080 weight=1 max_fails=2 fail_timeout=30s;
server 172.28.41.194:8080 weight=1 max_fails=2 fail_timeout=30s;

upstream two.session.com {
ip hash;
server 172.28.41.194:8844 weight=1 max_fails=2 fail_timeout=30s;
}
upstream three.session.com {
ip hash;
server 172.28.41.195:8028 weight=1 max_fails=2 fail_timeout=30s;
}

#proxy_cache_path /usr/local/nginx1.6.2/cache/webserver levels=1:2 keys_zone=webserver:20m max_size=1g;


server {
listen 8844; #監聽端口
server_name 172.28.41.130
index index.shtml ;
#去除域名後綴
location / { 
root /opt/app/ctpsp/staticfile/source ; #定義靜態資源文件存放的位置
index index.shtml ; #除去已index index.html index.shtml結尾的後綴文件


#本地動靜分離反向代理配置1
#全部jsp的頁面均交由tomcat或resin處理
location ~ \.(jsp|jspx|do)?$ {
proxy_pass http://one.session.com;
proxy_set_header Host $host; 
proxy_set_header X-Real-IP $remote_addr; #如下是一些反向代理的配置
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #後端的Web服務器能夠經過X-Forwarded-For獲取用戶真實IP
proxy_connect_timeout 90; #nginx跟後端服務器鏈接超時時間(代理鏈接超時)
proxy_send_timeout 90; #後端服務器數據回傳時間(代理髮送超時)
proxy_read_timeout 90; #鏈接成功後,後端服務器響應時間(代理接收超時)
proxy_buffer_size 4k; #設置代理服務器(nginx)保存用戶頭信息的緩衝區大小
proxy_buffers 4 32k; #proxy_buffers緩衝區,網頁平均在32k如下的設置
proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將從upstream服務器傳
proxy_cache_valid 200 10m; #參數被用於NGINX作反向代理時,其指定特定http狀態碼在nginx的cache內存活的時間長短
}
location /policylaw {
proxy_pass http://one.session.com/ctpsp_policylaw/; #代理內容須要tomcat有項目名,不能爲根
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; #如下是一些反向代理的配置 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #後端的Web服務器能夠經過X-Forwarded-For獲取用戶真實IP 
proxy_connect_timeout 90; #nginx跟後端服務器鏈接超時時間(代理鏈接超時) 
proxy_send_timeout 90; #後端服務器數據回傳時間(代理髮送超時) 
proxy_read_timeout 90; #鏈接成功後,後端服務器響應時間(代理接收超時) 
proxy_buffer_size 4k; #設置代理服務器(nginx)保存用戶頭信息的緩衝區大小 
proxy_buffers 4 32k; #proxy_buffers緩衝區,網頁平均在32k如下的設置 
proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2) 
proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將從upstream服務器傳 
proxy_cache_valid 200 10m; #參數被用於NGINX作反向代理時,其指定特定http狀態碼在nginx的cache內存活的時間長短

location /hdwiki/ {
proxy_pass http://three.session.com/hdwiki/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; #如下是一些反向代理的配置 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #後端的Web服務器能夠經過X-Forwarded-For獲取用戶真實IP 
proxy_connect_timeout 90; #nginx跟後端服務器鏈接超時時間(代理鏈接超時) 
proxy_send_timeout 90; #後端服務器數據回傳時間(代理髮送超時) 
proxy_read_timeout 90; #鏈接成功後,後端服務器響應時間(代理接收超時) 
proxy_buffer_size 4k; #設置代理服務器(nginx)保存用戶頭信息的緩衝區大小 
proxy_buffers 4 32k; #proxy_buffers緩衝區,網頁平均在32k如下的設置 
proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2) 
proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將從upstream服務器傳 
proxy_cache_valid 200 10m; #參數被用於NGINX作反向代理時,其指定特定http狀態碼在nginx的cache內存活的時間長短
}


location ^~ /ctpsp_guaranteeservice/ {
proxy_pass http://two.session.com/ctpsp_guaranteeservice/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; #如下是一些反向代理的配置 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #後端的Web服務器能夠經過X-Forwarded-For獲取用戶真實IP 
proxy_connect_timeout 90; #nginx跟後端服務器鏈接超時時間(代理鏈接超時) 
proxy_send_timeout 90; #後端服務器數據回傳時間(代理髮送超時) 
proxy_read_timeout 90; #鏈接成功後,後端服務器響應時間(代理接收超時) 
proxy_buffer_size 4k; #設置代理服務器(nginx)保存用戶頭信息的緩衝區大小 
proxy_buffers 4 32k; #proxy_buffers緩衝區,網頁平均在32k如下的設置 
proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2) 
proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將從upstream服務器傳 
# proxy_cache webserver; #參數被用於NGINX作反向代理時,其指定特定http狀態碼在nginx的cache內存活的時間長短
proxy_cache_valid 200 10m;
}
location /gm {
proxy_pass http://two.session.com/ctpsp_guaranteeservice/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; #如下是一些反向代理的配置 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #後端的Web服務器能夠經過X-Forwarded-For獲取用戶真實IP 
proxy_connect_timeout 90; #nginx跟後端服務器鏈接超時時間(代理鏈接超時) 
proxy_send_timeout 90; #後端服務器數據回傳時間(代理髮送超時) 
proxy_read_timeout 90; #鏈接成功後,後端服務器響應時間(代理接收超時) 
proxy_buffer_size 4k; #設置代理服務器(nginx)保存用戶頭信息的緩衝區大小 
proxy_buffers 4 32k; #proxy_buffers緩衝區,網頁平均在32k如下的設置 
proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2) 
proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將從upstream服務器傳 
# proxy_cache webserver; #參數被用於NGINX作反向代理時,其指定特定http狀態碼在nginx的cache內存活的時間長短
proxy_cache_valid 200 10m;
}
#本地動靜分離反向代理配置2
#全部靜態文件由nginx直接讀取不通過tomcat或resin
location ~ .*\.(shtml|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|docx|ico|ppt|pdf|xls|xlsx|mp3|wma)$ {
root /opt/app/ctpsp/staticfile/source;
}
location ~ .*\.(js|css)?$ {
root /opt/app/ctpsp/staticfile/source; #定義靜態資源文件存放的位置
}

error_page 404 /404.html; #默認的錯誤頁面

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

}
#nginx監聽請求重定向
server {
listen 8844;
server_name navi.cebpubservice.com;
rewrite "^/(.*)$" http://www.cebpubservice.com/tenderdocument/jsp/platformManage/platformManageDoor.jsp$1 break;
}

}

相關文章
相關標籤/搜索