nginx Als derzeit beliebtester Open-Source-Reverse-Proxy HTTP-Server wird er zur Implementierung von Ressourcen-Caching, Webserver verwendet Lastausgleich und andere Funktionen werden aufgrund ihres geringen Gewichts, ihrer hohen Leistung, ihrer hohen Zuverlässigkeit und anderer Eigenschaften häufig in Internet--Projekten verwendet. Es gibt online umfangreiche Einführungen zu verwandten Konzepten. Nachdem der verteilte Webserver-Cluster bereitgestellt wurde, ist es notwendig, die Sitzungsfreigabe für die Implementierung von Tomcat Server Es gibt verschiedene Lösungen, wie z. B. Tomcat-Cluster-Sitzung Broadcast, Nginx-IP-HashStrategie, Nginx Sticky Module und andere Lösungen. In diesem Artikel wird hauptsächlich die Freigabelösung für die Verwendung des Redis -Servers für Sitzung vorgestellt Einheitliche Speicherverwaltung.
Die relevante Anwendungsstruktur bezieht sich auf die folgende Abbildung: 2. Umgebungskonfiguration Die Testumgebung basiert aufLinux CentOS 6.5 , bitte installieren Sie zuerst Tomcat, Redis, Nginx verwandte Umgebungen wird in diesem Artikel nicht im Detail beschrieben. Die Testkonfiguration ist wie folgt:
Version
| IP_Port | ||||||||||||||||
nginx | 1.6.2 | 10.129.221.70:80 | |||||||||||||||
tomcat_1 | 7.0.54 | 10.129.221.70 :8080 | |||||||||||||||
tomcat_2 | 7.0.54 | 10.129.221.70:9090 | |||||||||||||||
redis | 2.8.19 | 10.129 .221.70:6379 |
3. Erstellen Sie tomcat-redis-session-manager-master
1 Da der Quellcode auf gradle, bitte konfigurieren Sie zuerst die gradle -Umgebung.
2, holen Sie sich tomcat-redis-session-manager-master von github Quellcode, die Adresse lautet wie folgt:
Quelle anzeigendrucken?
1. https://github.com/jcoleman/tomcat-redis-session-manager3, finden Sie build.gradle in der Quellcodedatei , da der Autor ein Drittanbieter-Warehouse (sonatype) verwendet, müssen Sie ein Konto registrieren, was zu mühsam ist. Verwenden Sie einfach mavenCentral Warehouse, während signaturbezogene Skripte mit Anmerkungen versehen und Ausgabeskripte für abhängige Pakete hinzugefügt werden copyJars (dist Verzeichnis), geändert build.gradle Die Datei lautet wie folgt:
Quelle anzeigendrucken?001.apply-Plugin: 'java'
002.apply-Plugin: 'maven'
003. Plugin anwenden: 'signing'
004.group = 'com.orangefunction'
006.version = '2.0.0'
007.
008.repositories {
009.mavenCentral()
010.}
011.
012.compileJava {
013.sourceCompatibility = 1.7
014.targetCompatibility = 1.7
015.}
016.
017.dependencies {
018.compile-Gruppe: 'org.apache', Name: 'tomcat-catalina', Version: '7.0.27'
019.compile-Gruppe: 'redis.clients', Name: 'jedis', Version: '2.5.2'
020.compile-Gruppe: 'org.apache.commons', Name: 'commons-pool2', Version: '2.2'
021.//compile-Gruppe: 'commons-codec', Name: 'commons-codec', Version: '1.9'
022.testCompile-Gruppe: 'junit', Name: 'junit', Version: '4.+'
024.testCompile 'org.hamcrest:hamcrest-core:1.3'
025.testCompile 'org.hamcrest:hamcrest-library :1.3'
026.testCompile 'org ', Version: '7.0.27'
028.}
029.
030.task javadocJar(Typ: Jar, dependOn: javadoc) {
031.classifier = 'javadoc'
032.from 'build/docs/javadoc'
033.}
034.
035. Aufgabe QuellenJar(Typ: Jar) {
036 .from sourceSets.main.allSource
037.classifier = 'sources'
038.}
039.
040.artifacts {
041.archives jar
042.
043.archives javadocJar
044.archives resourcesJar
045.🎜>
046. 047.//Signing {048.// Sign Configurations.Archives049 .//}050.051.task copyJars(type: Copy) {052.from Configurations.runtime053.into ' dist' 054.}055.signPom(deployment) }060.//repository(url: '
https://oss.sonatype.org/service/local/staging/deploy/ maven2/
') {062.// Authentifizierung (Benutzername: sonatypeUsername, Passwort: sonatypePassword)063.//}064.//repository (url: '
https://oss.sonatype.org/content/repositories/snapshots
') {065.// Authentifizierung(Benutzername: sonatypeUsername, Passwort: sonatypePassword)066.//}067. 068.pom.project {
069.name 'tomcat-redis-session-manager'
070.packaging 'jar'071.description 'Tomcat Redis Session Manager ist eine Tomcat-Erweiterung zum Speichern von Sitzungen Redis'072.url 'https:// github.com/jcoleman/tomcat-redis-session-manager'
073 074.issueManagement {075.url 'https: //github.com
:jcoleman/tomcat-redis-session-manager/issues'076.system ' GitHub Issues'077.}078 081.connection 'scm:git:git://github.com/jcoleman/tomcat-redis-session-manager. git
'082.developerConnection 'scm:git:git@github.com:jcoleman/tomcat-redis-session-manager.git'
083.}
084 🎜>085.licenses {
086.license {
087.name 'MIT'
088.url '
http://opensource.org/licenses /MIT'089.distribution 'repo'
090.}
091.}
092 093.developers {
094.developer {
095.id 'jcoleman'
096.name 'James Coleman'
097.email 'jtc331 @gmail.com'
098.url '
https://github.com/jcoleman'
099.}100.}
101.}
102.}
103.}
104.}
4, führen Sie den Befehlgradle aus, um den Quellcode zu erstellen, zu kompilieren und tomcat-redis-session-manager-master und Abhängigkeiten auszugeben GlasPaketQuelle anzeigen
Drucken?1.gradle build -x test copyJars Alle Ausgabelistendateien lauten wie folgt:
4.
Tomcat KonfigurationInstallieren und konfigurieren Sie zwei Maschinen Tomcat Web
Server, bzw. ändern Sie dieConnector Portnummern auf 8080 und 9090 und stellen Sie sicher, dass sie alle ordnungsgemäß funktionieren. Natürlich können Sie dieselbe Portnummer verwenden, wenn sie auf verschiedenen Hosts verteilt sind. 5. Schreiben Sie eine Testseite Um den Zugriff von
2 TaiwanTomcat Schreiben Sie die Seite und verpacken Sie sie für die Bereitstellung: 1, schreiben Sie eine Testseite für
tomcat_1, zeigen Sie "Antwort von Tomcat_1" an, und die Seite bietet eine Schaltfläche zum Anzeigen des aktuellen Sitzungswerts, des Pakets und der Veröffentlichung in tomcat_1 Server; 2, schreiben Sie eine Testseite für
tomcat_2 , zeigt " Antwort von tomcat_2 " an, und die Seite bietet eine Schaltfläche zum Anzeigen des aktuellen Sitzungs-Werts, Pakets und Veröffentlichen Sie es auf dem Server tomcat_2 . Besuchen Sie zu diesem Zeitpunkt http://10.129.221.70:8080 und http://10.129.221.70:9090
-Adresse, da auf verschiedeneWebserver zugegriffen wird, sodass jeder unterschiedliche Seiteninhalte anzeigt und Sitzung Werte müssen unterschiedlich sein. 6. tomcat session manager Konfiguration Ändern Sie die Konfiguration mit
tomcat-redis-session-manager-masterAls Tomcat-Sitzung
Manager1 bzw. das im dritten generierte tomcat-redis-session-manager-master und Abhängigkeiten
jar Paket umfasst tomcat lib Ordner des Installationsverzeichnisses 2, entsprechend 2 ändern Taiwan
Tomcat s context.xml -Datei, verwenden Sie tomcat-redis-session-manager - Master dient als Sitzungsmanager und gibt außerdem die Redis-Adresse und den Port an. context.xml Fügen Sie die folgende Konfiguration hinzu: Quelle anzeigen
Drucken ?
1.2.
3
, starten Sie jeweils
2
Stationen
Tomcat Server neu. 7. nginx Konfiguration1
, Standard ändern .conf Konfigurationsdatei, aktivieren Sie
Upstream Lastausgleich Tomcat-Cluster und verwenden Sie standardmäßig Polling. Quelle anzeigendrucken?
01.upstream site {ip_hash; //Verteilt basierend auf ip_hash
02.server localhost:8080;03.server localhost:9090; 04.} 05.
06.server {07.listen 80;08.server_name localhost;
09.
10.#charset koi8-r;
11.#access_log /var/log/nginx/log/host.access.log main;
12.
13.location / {
14.#root /usr/share/nginx/html;
15.#index index.html index.htm;
16.index index_tel.http://www.it165.net/pro/webjsp/" target="_blank"class="keylink">jsp a> index.http://www.it165.net/pro/webjsp/"target="_blank" class="keylink">jsp index.html index.htm ;
17.proxy_redirect off;
18.proxy_set_header Host $host;
19.proxy_set_header X-Real-IP $remote_addr;
20.proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
21.client_max_body_size 10m;
22.client_body_buffer_size 128k;
23.proxy_buffers 32 4k;
24.proxy_connect_timeout 3;
25.proxy_send_timeout 30;
26.proxy_read_timeout 30;
27.proxy_pass http://site;
28.
29.🎜>
30. 31.#error_page 404 /404.html;32. 33.# Serverfehlerseiten zur statischen Seite /50x.html umleiten34.#35.error_page 500 502 503 504 /50x.html;36.location = /50x.html {37.root /usr/share/nginx/html;38.}39. 40.# Proxy der PHP-Skripte an Apache, der auf 127.0.0.1:80 hört41.#42.#location ~ .php$ {43.# proxy_pass http://127.0.0.1;44.#}45. 46.# übergeben die PHP-Skripte an den FastCGI-Server, der 127.0.0.1:9000 überwacht.47.#48.#location ~ .php$ {49.# root html;50.# fastcgi_pass 127.0.0.1:9000;51.# fastcgi_index index.php;52.# fastc gi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;53.# include fastcgi_params;54.#}55. 56.# Zugriff auf .htaccess-Dateien verweigern, wenn Apaches Dokumentstammverzeichnis 57.# mit nginx übereinstimmt58.#59. #location ~ /.ht {60.# deny alle;61.#}62.}
2、nginx 重新加载配置
Quelle anzeigendrucken?
1.nginx -s reload八、配置Tomcat保存的Sitzung实体是放到redis中,tomcat可以记录session-id值与redis 进行对比,session-id是从Cookie中取得的,不同的tomcat存储sessioncookie的位置是不同的,所以必须修改所有tomcat中conf/context.xml,修改内容如下:
1、访问 http://10.129.221.70:8080 直接请求到tomcat_1服务器,
显示“ Antwort von tomcat_1 ”, Sitzung 值为'56E2FAE376A47F1C0961D722326B8423';
2, besuchen Sie http://10.129.221.70:9090 Anfragen direkt an tomcat_2 Server,
Anzeige „Antwort von Tomcat_2“ , Sitzung Wert ist '56E2FAE376A47F1C0961D722326B8423'; 🎜> (Standardport
80) Anfragen an nginx Reverse-Proxy zum angegebenen Web Der Server ist aufgrund der standardmäßigen Polling-Lademethode Der durch wiederholtes Aktualisieren der Seite angezeigte Inhalt ist in " Antwort von tomcat_1 " und "Antwort von Tomcat_2 " wechselt zwischen, aber der Wert für
Sitzungbleibt bei '56E2FAE376A47F1C0961D722326B8423'; 4, verwenden Sie redis-cli , um eine Verbindung herzustellen Auf dem
Redis-Server wird in der Ansicht „There is "56E2FAE376A47F1C0961D722326B8423" key of session Daten und Wert sind serialisierte Daten. 10. Bisher Sitzung basierend auf nginx Load Balancing Tomcat Cluster realisiert
Konsistenz. Startsequenz: redis——nginx——tomcat
redisStartskript=/usr/locat/redis.2.0.1/src/redis-servernginx+tomcat+redis realisiert die Sitzungsfreigabe Das Obige stellt die Nginx-Tomcat-Redis-Implementierung der Sitzungsfreigabe vor, einschließlich einiger Aspekte des Inhalts. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.