一、引言
1.1 代理問題
客戶端到底要將請(qǐng)求發(fā)送給哪臺(tái)服務(wù)器胚鸯。
發(fā)送給服務(wù)器1還是服務(wù)器2 |
---|
1.2 負(fù)載均衡問題
如果所有客戶端的請(qǐng)求都發(fā)送給了服務(wù)器1玄渗,那么服務(wù)器2將沒有任何意義
負(fù)載均衡問題 |
---|
1.3 資源優(yōu)化
客戶端發(fā)送的請(qǐng)求可能是申請(qǐng)動(dòng)態(tài)資源的,也有申請(qǐng)靜態(tài)資源仪媒,但是都是去Tomcat中獲取的
靜態(tài)資源訪問 |
---|
1.4 Nginx處理
在搭建集群后沉桌,使用Nginx |
---|
二、Nginx概述
Nginx是由俄羅斯人研發(fā)的算吩,應(yīng)對(duì)Rambler的網(wǎng)站留凭,并且2004年發(fā)布的第一個(gè)版本。
Nginx之父 |
---|
Nginx的特點(diǎn):
- 穩(wěn)定性極強(qiáng)偎巢。 7*24小時(shí)不間斷運(yùn)行蔼夜。
- Nginx提供了非常豐富的配置實(shí)例。
- 占用內(nèi)存小压昼,并發(fā)能力強(qiáng)求冷。
三、Nginx的安裝
3.1 安裝Nginx
使用Docker-Compose安裝窍霞,創(chuàng)建docker-compose.yml寫入以下內(nèi)容:
version: '3.1'
services:
nginx:
restart: always
image: daocloud.io/library/nginx:latest
container_name: nginx
ports:
- 80:80
[root@iz8vbdmrir2n6xqzrbd93hz ~]# cd /opt
[root@iz8vbdmrir2n6xqzrbd93hz opt]# ls
containerd docker_mysql_tomcat docker_ssm yangl
[root@iz8vbdmrir2n6xqzrbd93hz opt]# mkdir docker_nginx
[root@iz8vbdmrir2n6xqzrbd93hz opt]# cd docker_nginx/
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# vim docker-compose.yml
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker-compose-Linux-x86_64 up -d
Creating network "docker_nginx_default" with the default driver
Pulling nginx (daocloud.io/library/nginx:latest)...
latest: Pulling from library/nginx
6ec8c9369e08: Pull complete
d3cb09a117e5: Pull complete
7ef2f1459687: Pull complete
e4d1bf8c9482: Pull complete
795301d236d7: Pull complete
Digest: sha256:deb724a427ea79face617392a5a471fdcb4cdb57f971ee6b7e492b90fecb199f
Status: Downloaded newer image for daocloud.io/library/nginx:latest
Creating nginx ... done
測(cè)試:瀏覽器訪問即可(80端口可以省略不寫匠题,云服務(wù)器記得去開放80端口)
3.2 Nginx的配置文件
關(guān)于Nginx的核心配置文件nginx.conf
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d8af14af5cb daocloud.io/library/nginx:latest "/docker-entrypoint.…" 6 minutes ago Up 6 minutes 0.0.0.0:80->80/tcp nginx
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker exec -it 4d8 bash
root@4d8af14af5cb:/# cd /etc/nginx
root@4d8af14af5cb:/etc/nginx# ls
conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf
root@4d8af14af5cb:/etc/nginx# cat nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
# 參數(shù)說明
# 以上統(tǒng)稱為全局塊,
# worker_processes的數(shù)值越大但金,Nginx的并發(fā)能力就越強(qiáng)(由運(yùn)維人員修改)
# error_log 代表Nginx的錯(cuò)誤日志存放的位置
events {
worker_connections 1024;
}
# 參數(shù)說明
# events塊
# worker_connections的數(shù)值越大韭山,Nginx的并發(fā)能力就越強(qiáng)(由運(yùn)維人員修改)
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
# 參數(shù)說明
# http塊
# include代表引入一個(gè)外部的文件 -> /mime.types中放著大量的媒體類型
# include /etc/nginx/conf.d/*.conf; -> 引入了conf.d目錄下的以.conf為結(jié)尾的配置文件
root@4d8af14af5cb:/etc/nginx# ls
conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf
root@4d8af14af5cb:/etc/nginx# cd conf.d/
root@4d8af14af5cb:/etc/nginx/conf.d# ls
default.conf
root@4d8af14af5cb:/etc/nginx/conf.d# cat default.conf
# 參數(shù)說明
# server塊
# listen: 代表Nginx監(jiān)聽的端口號(hào)
# localhost:代表Nginx接收請(qǐng)求的ip
server {
listen 80;
listen [::]:80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# 參數(shù)說明
# location塊
# root:將接收到的請(qǐng)求根據(jù)/usr/share/nginx/html去查找靜態(tài)資源
# index: 默認(rèn)去上述的路徑中找到index.html或者index.htm
#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 /usr/share/nginx/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;
#}
}
3.3 修改docker-compose文件
為了方便修改Nginx配置,修改docker-compose.yml文件冷溃,設(shè)置 volumes 钱磅,重新啟動(dòng)
version: '3.1'
services:
nginx:
restart: always
image: daocloud.io/library/nginx:latest
container_name: nginx
ports:
- 80:80
volumes:
- /opt/docker_nginx/conf.d/:/etc/nginx/conf.d
root@4d8af14af5cb:/etc/nginx/conf.d# exit
exit
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# ls
docker-compose.yml
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker-compose-Linux-x86_64 down
Stopping nginx ... done
Removing nginx ... done
Removing network docker_nginx_default
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# vim docker-compose.yml
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker-compose-Linux-x86_64 build
nginx uses an image, skipping
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker-compose-Linux-x86_64 up -d
Creating network "docker_nginx_default" with the default driver
Creating nginx ... done
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# ls
conf.d docker-compose.yml
此時(shí)再使用瀏覽器訪問則無(wú)法訪問nginx.html頁(yè)面了,此時(shí)需要在conf.d目錄下創(chuàng)建default.conf文件似枕,配置一個(gè)server盖淡,再重新啟動(dòng)即可
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# cd conf.d/
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# ls
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# vim default.conf
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# cd ..
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker-compose-Linux-x86_64 restart
Restarting nginx ... done
四、Nginx的反向代理【重點(diǎn)
】
4.1 正向代理和反向代理介紹
正向代理:
- 正向代理服務(wù)是由客戶端設(shè)立的菠净。
- 客戶端了解代理服務(wù)器和目標(biāo)服務(wù)器都是誰(shuí)禁舷。
- 幫助咱們實(shí)現(xiàn)突破訪問權(quán)限彪杉,提高訪問的速度,對(duì)目標(biāo)服務(wù)器隱藏客戶端的ip地址牵咙。
正向代理 |
---|
反向代理:
- 反向代理服務(wù)器是配置在服務(wù)端的派近。
- 客戶端是不知道訪問的到底是哪一臺(tái)服務(wù)器。
- 達(dá)到負(fù)載均衡洁桌,并且可以隱藏服務(wù)器真正的ip地址渴丸。
4.2 基于Nginx實(shí)現(xiàn)反向代理
準(zhǔn)備一個(gè)目標(biāo)服務(wù)器,啟動(dòng)了之前的tomcat服務(wù)器另凌,使其能夠訪問到頁(yè)面
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
818cd6a46ecb daocloud.io/library/nginx:latest "/docker-entrypoint.…" 3 hours ago Up 40 minutes 0.0.0.0:80->80/tcp nginx
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# cd ..
[root@iz8vbdmrir2n6xqzrbd93hz opt]# ls
containerd docker_mysql_tomcat docker_nginx docker_ssm yangl
[root@iz8vbdmrir2n6xqzrbd93hz opt]# cd docker_mysql_tomcat/
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# ls
docker-compose.yml mysql_data tomcat_logs tomcat_webapps
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# cd tomcat_webapps/
[root@iz8vbdmrir2n6xqzrbd93hz tomcat_webapps]# ls
[root@iz8vbdmrir2n6xqzrbd93hz tomcat_webapps]# mkdir ROOT
[root@iz8vbdmrir2n6xqzrbd93hz tomcat_webapps]# cd ROOT/
[root@iz8vbdmrir2n6xqzrbd93hz ROOT]# vim index.html
[root@iz8vbdmrir2n6xqzrbd93hz ROOT]# cd ..
[root@iz8vbdmrir2n6xqzrbd93hz tomcat_webapps]# cd ..
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker-compose-Linux-x86_64 up -d
Starting tomcat ... done
Starting mysql ... done
然后修改nginx的default.conf配置文件谱轨,使其通過Nginx訪問到tomcat服務(wù)器。
server {
listen 80;
listen [::]:80;
server_name localhost;
# 基于反向代理訪問到Tomcat服務(wù)器
location / {
proxy_pass http://39.98.132.196:8080/;
}
}
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# cd ..
[root@iz8vbdmrir2n6xqzrbd93hz opt]# ls
containerd docker_mysql_tomcat docker_nginx docker_ssm yangl
[root@iz8vbdmrir2n6xqzrbd93hz opt]# cd docker_nginx/
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# ls
conf.d docker-compose.yml
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# cd conf.d/
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# ls
default.conf
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# vim default.conf
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker-compose-Linux-x86_64 restart
Restarting nginx ... done
4.3 關(guān)于Nginx的location路徑映射
優(yōu)先級(jí)關(guān)系如下:
# 1. 直接匹配
location = / {
# 精準(zhǔn)匹配吠谢,主機(jī)名后面不能帶任何的字符串
}
# 2. 通用匹配
location /xxx {
# 匹配所有以/xxx開頭的路徑
}
# 3. 正則匹配
location ~ /xxx {
# 匹配所有以/xxx開頭的路徑
}
# 4. 匹配開頭路徑
location ^~ /images/ {
# 匹配所有以/images開頭的路徑
}
# 5. 匹配后綴
location ~* \.(gif|jpg|png)$ {
# 匹配以gif或者jpg或者png為結(jié)尾的路徑
}
# 6. 全部通配
location / {
# 匹配全部路徑
}