一、簡介:
Tomcat在高併發環境下處理動態請求時性能很低,而在處理靜態頁面更加脆弱。雖然Tomcat的最新版本支持epoll,但是通過Nginx來處理靜態頁面要比通過Tomcat處理在性能方面好很多。
二、下載安裝:
下載nginx
http://nginx.org/en/download.html
下載解壓後放到F:\nginx-1.7.1(官網這樣要求的,不知道放其它盤有沒有問題)
啓動nginx.exe,然後在瀏覽器輸入127.0.0.1即可
配置自己的項目測試
第二環節我們使用了默認的nginx.conf 。Nginx的配置文件都存於目錄conf文件下,其中nginx.conf是它的主配置文件。
以下爲我加上註釋並配置的新的虛擬server
- #運行用戶
- #user nobody;
- #開啓進程數 <=CPU數
- worker_processes 1;
- #錯誤日誌保存位置
- #error_log logs/error.log;
- #error_log logs/error.log notice;
- #error_log logs/error.log info;
- #進程號保存文件
- #pid logs/nginx.pid;
- #等待事件
- events {
- #Linux下打開提高性能
- #use epoll;
- #每個進程最大連接數(最大連接=連接數x進程數)
- worker_connections 1024;
- }
- http {
- #文件擴展名與文件類型映射表
- include mime.types;
- #默認文件類型
- default_type application/octet-stream;
- #日誌文件輸出格式 這個位置相於全局設置
- #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- # '$status $body_bytes_sent "$http_referer" '
- # '"$http_user_agent" "$http_x_forwarded_for"';
- #請求日誌保存位置
- #access_log logs/access.log main;
- #設定請求緩衝
- client_header_buffer_size 1k;
- large_client_header_buffers 4 4k;
- #打開發送文件
- sendfile on;
- #tcp_nopush on;
- #keepalive_timeout 0;
- keepalive_timeout 65;
- #客戶端上傳文件大小控制
- client_max_body_size 8m;
- #打開gzip壓縮
- #gzip on;
- #設定負載均衡的服務器列表
- #upstream mysvr {
- # #weigth參數表示權值,權值越高被分配到的機率越大
- # #本機上的Squid開啓3128端口
- # #server 192.168.8.1:3128 weight=5;
- # #server 192.168.8.2:80 weight=1;
- # #server 192.168.8.3:80 weight=6;
- #}
- #第一個虛擬主機
- server {
- #監聽IP端口
- listen 80;
- #主機名
- server_name localhost;
- #root
- #設置字符集
- #charset koi8-r;
- #本虛擬server的訪問日誌 相當於局部變量
- #access_log logs/host.access.log main;
- #日誌文件輸出格式
- #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- # '$status $body_bytes_sent "$http_referer" '
- # '"$http_user_agent" "$http_x_forwarded_for"';
- location / {
- root html;
- index index.html index.htm;
- }
- #靜態文件緩存時間設置
- #location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${
- # expires 30d;
- #}
- #靜態文件緩存時間設置
- #location ~ .*\.(js|css)?${
- # expires 1h;
- #}
- #對本server"/"啓用負載均衡
- #location / {
- # proxy_pass http://mysvr;
- # proxy_redirect off;
- # proxy_set_header Host $host;
- # proxy_set_header X-Real-IP $remote_addr;
- # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- # client_max_body_size 10m;
- # client_body_buffer_size 128k;
- # proxy_connect_timeout 90;
- # proxy_send_timeout 90;
- # proxy_read_timeout 90;
- # proxy_buffer_size 4k;
- # proxy_buffers 4 32k;
- # proxy_busy_buffers_size 64k;
- # proxy_temp_file_write_size 64k;
- #}
- #設定查看Nginx狀態的地址
- #location /NginxStatus {
- # stub_status on;
- # access_log on;
- # auth_basic “NginxStatus”;
- # auth_basic_user_file conf/htpasswd;
- #}
- #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;
- }
- # proxy the PHP scripts to Apache listening on 127.0.0.1:80
- #
- #location ~ \.php$ {
- # proxy_pass http://127.0.0.1;
- #}
- # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
- #
- #location ~ \.php$ {
- # root html;
- # fastcgi_pass 127.0.0.1:9000;
- # fastcgi_index index.php;
- # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
- # include fastcgi_params;
- #}
- # deny access to .htaccess files, if Apache's document root
- # concurs with nginx's one
- #
- #location ~ /\.ht {
- # deny all;
- #}
- }
- # another virtual host using mix of IP-, name-, and port-based configuration
- server {
- #多監聽
- listen localhost:8666;
- #主機名
- server_name LIULJ2576;
- #WEB文件路徑
- root E:/Portal;
- #默認首頁
- index HomePage.html;
- #location / {
- # #這裏相當於局部變量
- # root E:/Portal;
- # index HomePage.html;
- #}
- }
- # HTTPS server HTTPS SSL加密服務器
- #
- #server {
- # listen 443;
- # server_name localhost;
- # ssl on;
- # ssl_certificate cert.pem;
- # ssl_certificate_key cert.key;
- # ssl_session_timeout 5m;
- # ssl_protocols SSLv2 SSLv3 TLSv1;
- # ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
- # ssl_prefer_server_ciphers on;
- # location / {
- # root html;
- # index index.html index.htm;
- # }
- #}
- }
dos環境運行命令:
start nginx//啓動nginx
nginx -s stop // 停止nginx
nginx -s reload // 重新加載配置文件
nginx -s quit // 退出nginx
nginx -t//檢查配置文件是否正確
二、Nginx可以通過以下兩種方式來實現與Tomcat的耦合:
將靜態頁面請求交給Nginx,動態請求交給後端Tomcat處理。
將所有請求都交給後端的Tomcat服務器處理,同時利用Nginx自身的負載均衡功能進行多臺Tomcat服務器的負載均衡。
下面通過兩個配置實例分別講述這兩種實現
下載Tomcat6:http://mirrors.cnnic.cn/apache/tomcat/tomcat-6/v6.0.41/bin/apache-tomcat-6.0.41-windows-x86.zip在F:\nginx-1.7.1\路徑新建tomcat文件夾。把下載後的apache-tomcat-6.0.41-windows-x86.zip解壓。解壓後把apache-tomcat-6.0.41更名爲apache-tomcat-8080。並複製幾個apache-tomcat-8080分別改名爲apache-tomcat-8060,apache-tomcat-8090
啓動多個tomcat。修改tomcat裏面的server.xml配置文件。注意以下修改的四處,各個tomcat配置裏面的端口號不要有衝突。例如tomcat1裏面的
Server port=18006,則另外一個就不能用此端口。其他的依次類推
《一》
- <!-- 修改port端口:倆個tomcat不能重複,端口隨意,別太小-->
- <Server port="18006" shutdown="SHUTDOWN">
- <!-- port="18081" tomcat監聽端口,隨意設置,別太小 -->
- <Connector port="18081" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" />
- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
《四》
- <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
F:\nginx-1.7.1\tomcat\apache-tomcat-8080\bin>startup.bat。則兩個不同的tomcat已經啓動完成
在IE上輸入http://localhost/index.jsp和http://localhost/,如果得到不同的界面表示成功
最終的nginx.conf配置如下
- #運行用戶
- #user nobody;
- #開啓進程數 <=CPU數
- worker_processes 1;
- #錯誤日誌保存位置
- #error_log logs/error.log;
- #error_log logs/error.log notice;
- #error_log logs/error.log info;
- #進程號保存文件
- #pid logs/nginx.pid;
- #等待事件
- events {
- #Linux下打開提高性能
- #use epoll;
- #每個進程最大連接數(最大連接=連接數x進程數)
- worker_connections 1024;
- }
- http {
- #文件擴展名與文件類型映射表
- include mime.types;
- #默認文件類型
- default_type application/octet-stream;
- #日誌文件輸出格式 這個位置相於全局設置
- #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- # '$status $body_bytes_sent "$http_referer" '
- # '"$http_user_agent" "$http_x_forwarded_for"';
- #請求日誌保存位置
- #access_log logs/access.log main;
- #設定請求緩衝
- client_header_buffer_size 1k;
- large_client_header_buffers 4 4k;
- #打開發送文件
- sendfile on;
- #tcp_nopush on;
- #keepalive_timeout 0;
- keepalive_timeout 65;
- #客戶端上傳文件大小控制
- client_max_body_size 8m;
- #打開gzip壓縮
- #gzip on;
- #gzip_min_length 1000;
- #gzip_types text/plain text/css application/x-javascript;
- #設定負載均衡的服務器列表
- upstream mysvr {
- #weigth參數表示權值,權值越高被分配到的機率越大
- #根據ip計算將請求分配各那個後端tomcat,許多人誤認爲可以解決session問題,其實並不能。
- #同一機器在多網情況下,路由切換,ip可能不同
- server 127.0.0.1:8080 weight=1;
- server 127.0.0.1:8090 weight=2;
- }
- #第一個虛擬主機
- server {
- #監聽IP端口
- listen 80;
- #主機名
- server_name localhost;
- #root
- #設置字符集
- #charset koi8-r;
- #本虛擬server的訪問日誌 相當於局部變量
- #access_log logs/host.access.log main;
- #日誌文件輸出格式
- #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- # '$status $body_bytes_sent "$http_referer" '
- # '"$http_user_agent" "$http_x_forwarded_for"';
- #location / {
- # root html;
- # index index.html index.htm;
- #}
- #靜態文件緩存時間設置
- location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
- expires 30d;
- }
- #靜態文件緩存時間設置
- location ~ .*\.(js|css)?$ {
- expires 1h;
- }
- #對本server"/"啓用負載均衡
- #如果開啓了這裏的location,則79行的location必須屏蔽
- #對各種靜態還是動態的數據進行過濾
- #此處如果請求是.jsp、.do結尾的文件都交給Tomcat服務器
- #其他的交給nginx處理
- location ~ (\.jsp)|(\.do)$ {
- proxy_pass http://mysvr;
- proxy_redirect off;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- client_max_body_size 10m;
- client_body_buffer_size 128k;
- proxy_connect_timeout 90;
- proxy_send_timeout 90;
- proxy_read_timeout 90;
- proxy_buffer_size 4k;
- proxy_buffers 4 32k;
- proxy_busy_buffers_size 64k;
- proxy_temp_file_write_size 64k;
- }
- #設定查看Nginx狀態的地址
- location /NginxStatus {
- stub_status on;
- access_log on;
- auth_basic “NginxStatus”;
- auth_basic_user_file conf/htpasswd;
- }
- #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;
- #}
- # proxy the PHP scripts to Apache listening on 127.0.0.1:80
- #
- #location ~ \.php$ {
- # proxy_pass http://127.0.0.1;
- #}
- # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
- #
- #location ~ \.php$ {
- # root html;
- # fastcgi_pass 127.0.0.1:9000;
- # fastcgi_index index.php;
- # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
- # include fastcgi_params;
- #}
- # deny access to .htaccess files, if Apache's document root
- # concurs with nginx's one
- #
- #location ~ /\.ht {
- # deny all;
- #}
- }
- # another virtual host using mix of IP-, name-, and port-based configuration
- server {
- #多監聽
- listen localhost:50000;
- #主機名
- server_name LIULJ2576;
- #WEB文件路徑
- root E:/Portal;
- #默認首頁
- index HomePage.html;
- #location / {
- # #這裏相當於局部變量
- # root E:/Portal;
- # index HomePage.html;
- #}
- }
- # HTTPS server HTTPS SSL加密服務器
- #
- #server {
- # listen 443;
- # server_name localhost;
- # ssl on;
- # ssl_certificate cert.pem;
- # ssl_certificate_key cert.key;
- # ssl_session_timeout 5m;
- # ssl_protocols SSLv2 SSLv3 TLSv1;
- # ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
- # ssl_prefer_server_ciphers on;
- # location / {
- # root html;
- # index index.html index.htm;
- # }
- #}
- }