关于nginx的使用以及为什么使用【Nginx】什么是Nginx?为什么使用Nginx?
nginx 之 proxy_pass详解nginx 之 proxy_pass详解
生产环境和开发环境中nginx基本配置,其中测试环境,将app后台管理放在39上而不是66上是因为66是nginx转发的中心,最好区分开。
1、39上启动前端服务:
①解压tomcat,设置环境变量,JAVA_HOME和Path。tomcat启动一闪而过:安装前确保已经安装配置JDK。比如JAVA_HOME没配好是会一闪而过的。
②通过68远程到39,将parkmall文件整个复制过去放在webapps文件夹下
③启动bin目录下startup.bat
2、nginx访问简图
3、nginx中文件服务器的配置
location /files/
这里的files
需要与39上IIS的物理路径E:\guian_files\files
中的files
相同。如果nginx中没有配置location /files/
,可以通过自身的服务http://172.16.11.39:8081/files/templates/ggg.jpeg访问,但是不能通过nginx的转发地址http://172.16.11.66:8180/files/templates/ggg.jpeg访问。如果nginx中配置了location /files/
且files相同,那么通过两个url都可以访问。
######################### 访问IIS 文件服务器
location /files/ {
access_log off;
access_log logs/access-ftp-$log_time.log logfiles_187;
#proxy_redirect http:// $scheme://;
#proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
#proxy_set_header Host $http_host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
# proxy_buffer_size 400k;
# proxy_buffers 40 320k;
# proxy_busy_buffers_size 640k;
# proxy_temp_file_write_size 640k;
#此处配置的域名必须与upstream的域名一致,才能转发。
proxy_pass http://FTPfiles;
}
39上IIS的物理路径.png
4、nginx中访问前端服务的配置
location /mh/
这里的mh
需要与39上前端物理路径E:\GAYGPublic\apache-tomcat-7.0.86\webapps\mh
中的mh
相同。如果nginx中没有配置location /mh/
,可以通过自身的服务http://172.16.11.39:8000/mh/ed3d2ddd.jpg访问,但是不能通过nginx的转发地址http://172.16.11.66:8180/mh/ed3d2ddd.jpg访问;如果nginx中配置了location /mh/
且mh相同,那么通过两个url都可以访问。
######################### 访问物业管理系统
location /mh/ {
access_log off;
access_log logs/access-wy-$log_time.log logfiles_187;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
# proxy_buffer_size 400k;
# proxy_buffers 40 320k;
# proxy_busy_buffers_size 640k;
# proxy_temp_file_write_size 640k;
#此处配置的域名必须与upstream的域名一致,才能转发。
proxy_pass http://qianduan;
}
172.16.11.39上 tomcat.png
注:如果webapps下有mh
文件夹,但是没有在nginx中配置location /mh/
,那通过http://172.16.11.39:8000/mh/ed3d2ddd.jpg是不能够访问的。aaa
同理。
5、proxy_pass斜杠问题
①对于图片(被设置成了IIS)
⑴如果files和IIS物理路径相同,且proxy_pass没有斜杠,则输入浏览器的urlA只有一个files
理解错误✖(TODO2018/11/8理解:其实这里的files和虚拟机上的物理路径没有一点关系,不用在意location后的名称,有斜杠会被代理掉,到实际指向的url中不会显示)
(TODO2018/11/9理解:其实只需要根据实际指向地址urlB来决定location后的名称A即可,如果不带斜杠,名称A不会被代理掉,会拼接在urlB中,拼接的url就变成了http://172.16.11.39:8081/files/...,而要想保证能访问到图片,在这个例子里名称A就必须是files,因为如果是fileddd这样的名称,拼接的url就变成了http://172.16.11.39:8081/fileddd/...而这个地址必然是错误的,因为39文件服务器上设置的IIS根本就没有fileddd这个目录又怎么可能访问到呢。)
urlA:http://172.16.11.66:8180/files/YY/20180110/910c6811a7dd408d9be413b26e72f4b9_360%E6%88%AA%E5%9B%BE16600904648177.png
(浏览器中输入)
urlB(FTPfiles):172.16.11.39:8081
(实际指向)
urlC:http://172.16.11.39:8081/files/YY/20180110/910c6811a7dd408d9be413b26e72f4b9_360%E6%88%AA%E5%9B%BE16600904648177.png
(实际指向最终url)
location /files/ { #其实这里的files和虚拟机上的物理路径还是有关系的
proxy_pass http://FTPfiles; #没有斜杠
}
⑵如果files和IIS物理路径相同(名称为什么相同见上),proxy_pass有斜杠,则访问的url中有两个files.
(TODO2018/11/9理解:见上。如果proxy_pass后带斜杠,名称A会被代理掉,不会拼接在urlB中,所以urlA是http://172.16.11.66:8180/files/files...指向实际的地址是http://172.16.11.39:8081/files...
**)
urlA:http://172.16.11.66:8180/files/files/YY/20180110/910c6811a7dd408d9be413b26e72f4b9_360%E6%88%AA%E5%9B%BE16600904648177.png
(浏览器中输入)
urlB(FTPfiles):172.16.11.39:8081
(实际指向)
urlC:http://172.16.11.39:8081/files/YY/20180110/910c6811a7dd408d9be413b26e72f4b9_360%E6%88%AA%E5%9B%BE16600904648177.png
(实际指向最终url)
location /files/ {
proxy_pass http://FTPfiles/; #有斜杠
}
⑶ 如果files和IIS物理路径不相同,proxy_pass没有斜杠,名称A不会被代理掉,会被拼接到urlB上,则输入浏览器的urlA是不会访问到图片的,因为虚拟机上没有名称A的目录,假如名称A是filedd,则
urlA:http://172.16.11.66:8180/filedd/files/YY/20180110/910c6811a7dd408d9be413b26e72f4b9_360%E6%88%AA%E5%9B%BE16600904648177.png
(浏览器中输入,是访问不到图片的)
urlB(FTPfiles):172.16.11.39:8081
(实际指向)
urlC:http://172.16.11.39:8081/filedd/files/YY/20180110/910c6811a7dd408d9be413b26e72f4b9_360%E6%88%AA%E5%9B%BE16600904648177.png
(实际指向最终url,访问不到图片)
location /filedd/ {
proxy_pass http://FTPfiles; #没有斜杠
}
⑷ 如果files和IIS物理路径不相同,proxy_pass有斜杠,名称A会被代理掉,不会被拼接到urlB上,输入浏览器的urlA就是名称A+虚拟机的目录名,假如名称A是filedd,则
urlA:http://172.16.11.66:8180/filedd/files/YY/20180110/910c6811a7dd408d9be413b26e72f4b9_360%E6%88%AA%E5%9B%BE16600904648177.png
(浏览器中输入)
urlB(FTPfiles):172.16.11.39:8081
(实际指向)
urlC:http://172.16.11.39:8081/files/YY/20180110/910c6811a7dd408d9be413b26e72f4b9_360%E6%88%AA%E5%9B%BE16600904648177.png
(实际指向最终url)
location /filedd/ {
proxy_pass http://FTPfiles/; #有斜杠
}
⑸ 如果没有配置nginx,则:
http://172.16.11.39:8081/files/YY/20180110/910c6811a7dd408d9be413b26e72f4b9_360%E6%88%AA%E5%9B%BE16600904648177.png
②同理,对于tomcat下的前端项目:
⑴ 如果名称A和tomcat下前端物理路径E:\GAYGPublic\apache-tomcat-7.0.86\webapps\aaa
相同,且proxy_pass没有斜杠,则名称A不会被代理掉,会拼接到urlB上,urlB为http://172.16.11.39:8000/aaa...输入浏览器的url中只有一个aaa
urlA:http://172.16.11.66:8180/aaa/ed3d2ddd.jpg
(浏览器中输入)
urlB(qianduan):172.16.11.39:8000
(实际指向)
urlC:http://172.16.11.39:8000/aaa/ed3d2ddd.jpg
(实际指向最终url)
location /aaa/ { #名称A
proxy_pass http://qianduan; #没有斜杠
}
⑵ 如果名称A和tomcat下前端物理路径E:\GAYGPublic\apache-tomcat-7.0.86\webapps\aaa
相同,但是proxy_pass有斜杠,则名称A会被代理掉,不会拼接到urlB上,urlB为http://172.16.11.39:8000/aaa...输入浏览器的urlA有两个aaa
urlA:http://172.16.11.66:8180/aaa/aaa/ed3d2ddd.jpg
(浏览器中输入)
urlB(qianduan):172.16.11.39:8000
(实际指向)
urlC:http://172.16.11.39:8000/aaa/ed3d2ddd.jpg
(实际指向最终url)
location /aaa/ {
proxy_pass http://qianduan/; #有斜杠
}
⑶ 如果名称A和tomcat下前端物理路径E:\GAYGPublic\apache-tomcat-7.0.86\webapps\aaa
不相同,proxy_pass没有斜杠,则名称A不会被代理掉,会拼接到urlB上,假设名称A为hh,则urlB为http://172.16.11.39:8000/hh/aaa...输入浏览器的urlA是名称A+aaa
urlA:http://172.16.11.66:8180/hh/aaa/ed3d2ddd.jpg
(浏览器中输入,访问不到图片,因为tomcat下根本没有hh这个目录)
urlB(qianduan):172.16.11.39:8000
(实际指向)
urlC:http://172.16.11.39:8000/hh/aaa/ed3d2ddd.jpg
(实际指向最终url,访问不到图片)
location /hh/ {
proxy_pass http://qianduan; #没有斜杠
}
⑷ 如果名称A和tomcat下前端物理路径E:\GAYGPublic\apache-tomcat-7.0.86\webapps\aaa
不相同,但是proxy_pass有斜杠,则名称A会被代理掉,不会拼接到urlB上,hh被代理掉不会在urlB中显示,urlB为http://172.16.11.39:8000/aaa...输入浏览器的urlA是名称A+aaa
urlA:http://172.16.11.66:8180/hh/aaa/ed3d2ddd.jpg
(浏览器输入,可以访问到图片)
urlB(qianduan):172.16.11.39:8000
(实际指向)
urlC:http://172.16.11.39:8000/aaa/ed3d2ddd.jpg
(实际指向最终url)
location /hh/ {
proxy_pass http://qianduan/; #有斜杠
}
⑸ 如果没有配置nginx,则:
http://172.16.11.39:8000/aaa/ed3d2ddd.jpg
(是否需要重启tomcat,有时候又不能访问??)
记住,根本虚机/远程上的url来配置nginx就不会乱了
360截图16600903103119145_副本.png
6、nginx完整配置--开发环境
#user nobody;
worker_processes 16;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 2048;
}
http {
include mime.types;
default_type application/octet-stream;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
log_format logfiles_187 '$remote_addr - $remote_user [$time_iso8601] "$request" '
'[$status] $body_bytes_sent "[$http_referer]" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
################################# WEB后台服务代理 #####################################################
upstream Dservers{
server 172.16.11.66:10002;
}
################################# 前台服务代理 #####################################################
upstream qianduan{
server 172.16.11.39:8000;
}
################################# 手机后台服务代理 #####################################################
upstream Mobile{
server 172.16.11.39:8000 down;
server 172.16.11.68:8180;
}
################################# IIS文件服务代理 #####################################################
upstream FTPfiles{
server 172.16.11.39:8081;
}
server {
listen 8180;
server_name 172.16.11.66
charset utf-8;
if ($time_iso8601 ~ '(\d{4}-\d{2}-\d{2})') {
set $log_time $1;
}
#client_max_body_size 10m;
#client_body_buffer_size 1280k;
######################### 访问统一门户系统
location /mh/ {
access_log off;
access_log logs/access-mh-$log_time.log logfiles_187;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
# proxy_buffer_size 400k;
# proxy_buffers 40 320k;
# proxy_busy_buffers_size 640k;
# proxy_temp_file_write_size 640k;
#此处配置的域名必须与upstream的域名一致,才能转发。
proxy_pass http://qianduan;
}
######################### 访问物业管理系统
location /wy/ {
access_log off;
access_log logs/access-wy-$log_time.log logfiles_187;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
# proxy_buffer_size 400k;
# proxy_buffers 40 320k;
# proxy_busy_buffers_size 640k;
# proxy_temp_file_write_size 640k;
#此处配置的域名必须与upstream的域名一致,才能转发。
proxy_pass http://qianduan;
}
######################### 访问运营管理系统
location /yy/ {
access_log off;
access_log logs/access-yy-$log_time.log logfiles_187;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
# proxy_buffer_size 400k;
# proxy_buffers 40 320k;
# proxy_busy_buffers_size 640k;
# proxy_temp_file_write_size 640k;
#此处配置的域名必须与upstream的域名一致,才能转发。
proxy_pass http://qianduan;
}
######################### 访问企业云系统
location /qyy/ {
access_log off;
access_log logs/access-qyy-$log_time.log logfiles_187;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
# proxy_buffer_size 400k;
# proxy_buffers 40 320k;
# proxy_busy_buffers_size 640k;
# proxy_temp_file_write_size 640k;
#此处配置的域名必须与upstream的域名一致,才能转发。
proxy_pass http://qianduan;
}
#########################
location /aaa/ {
access_log off;
access_log logs/access-qyy-$log_time.log logfiles_187;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
# proxy_buffer_size 400k;
# proxy_buffers 40 320k;
# proxy_busy_buffers_size 640k;
# proxy_temp_file_write_size 640k;
#此处配置的域名必须与upstream的域名一致,才能转发。
proxy_pass http://qianduan;
}
######################### 访问手机后台服务
location /parkmall/ {
access_log off;
access_log logs/access-mobile-$log_time.log logfiles_187;
#proxy_set_header Host $http_host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
# proxy_buffer_size 400k;
# proxy_buffers 40 320k;
# proxy_busy_buffers_size 640k;
# proxy_temp_file_write_size 640k;
#此处配置的域名必须与upstream的域名一致,才能转发。
proxy_pass http://Mobile;
}
######################### 访问IIS 文件服务器
location /files/ {
access_log off;
access_log logs/access-ftp-$log_time.log logfiles_187;
#proxy_redirect http:// $scheme://;
#proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
#proxy_set_header Host $http_host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
# proxy_buffer_size 400k;
# proxy_buffers 40 320k;
# proxy_busy_buffers_size 640k;
# proxy_temp_file_write_size 640k;
#此处配置的域名必须与upstream的域名一致,才能转发。
proxy_pass http://FTPfiles;
}
######################### 访问WEB后台服务
location / {
access_log off;
access_log logs/access-server-$log_time.log logfiles_187;
#proxy_set_header Host $http_host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
# proxy_buffer_size 400k;
# proxy_buffers 40 320k;
# proxy_busy_buffers_size 640k;
# proxy_temp_file_write_size 640k;
#此处配置的域名必须与upstream的域名一致,才能转发。
proxy_pass http://Dservers;
}
error_page 404 /404.html;
location = /40x.html {
root html;
}
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
网友评论