今天学习到Ngnix,了解一下反向代理:主要涉及到客户端和服务端,而代理就是出于两者之间的一个中介机构
当(客户端<——>代理——>服务端)客户端让中介代理自己去访问服务端属于正向代理(客户有需求,让代理去帮忙实现);
当(客户端<——代理<——>服务端)服务端让中介代理自己去访问客户端属于反向代理(服务产品出来了,找客户)
既:反向代理是中介代理服务端处理与客户端的交互。
一 、windows下实现
1、下载Nginx安装包http://nginx.org/en/download.html
2、解压到一个路径,不要有中文
3、在cmd中启动nginx
4、在浏览器访问127.0.0.1,出现以下画面说明启动成功
5、配置文件conf/nginx.conf
server {
listen 80;#nginx监听端口
server_name maibao.cms.com;#客户端访问的域名
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host; #这里是重点,这样配置才不会丢失端口
location / {
proxy_pass http://127.0.0.1:8080/;#代理映射到的实际域名端口
proxy_read_timeout 600;#代理访问超时时间
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
6、配置本家hosts文件
最后加上ip映射:127.0.0.1 maibao.cms.com
7、然后重启nginx:nginx -s reload
然后用tomcat发布一个服务:127.0.0.1:8080
浏览器输入maibao.cms.com,会访问到tomcat发布的服务
8、实现对外一个服务地址、实现外部访问根据路径名称不一样,访问不同服务配置
upstream server3 {
ip_hash;
server 127.0.0.1:8083;
}
upstream server4 {
ip_hash;
server 127.0.0.1:8084;
}
upstream server5 {
ip_hash;
server 127.0.0.1:8085;
}
server {
listen 80;#nginx监听端口
server_name localhost;#客户端访问的域名
#实现端口后面如果跟/web4/,则此处拦截访问,并执行里面的内容
location ^~ /web4/ {
proxy_pass http://server4/web4/;
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;
}
#实现端口后面如果跟/web3/,则此处拦截访问,并执行里面的内容
location ^~ /web3/ {
proxy_pass http://server3/web3/;
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;
}
#实现端口后面如果跟/web5/,则此处拦截访问,并执行里面的内容
location ^~ /web5/ {
proxy_pass http://server5/web5/;
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;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
访问结果
二、linux下安装nginx
很全:https://yq.aliyun.com/articles/655855
1、vi conf/nginx.conf 进入sbin目录下,对conf配置进行编辑
2、vi /etc/hosts 对hosts文件进行编辑
3、nginx -s reload 重新加载配置文件
4、浏览器访问域名maibao.cms.com
总结:当浏览器访问域名:maibao.cms.com,通过hosts文件进行ip映射到127.0.0.1,因为默认是80端口,所以访问的实际是127.0.0.1:80;因为nginx监听的是80端口,所以就会映射到http://127.0.0.1:8080/。
注,如果报错OpenEvent("Global\ngx_reload_10120") failed (2: The system cannot find the file specified)
说明pid为10120的nginx没启动
报错为*29 CreateFile() "E:\ngnix\nginx-1.12.2/html/web7" failed (2: The system cannot find the file specified), client: 127.0.0.1, server: localhost, request: "GET /web7 HTTP/1.1", host: "127.0.0.1"
是找不到web7的路径服务