nginx反向代理
A. nginx反向代理tomcat,不能完全访问,速度也很慢
问题解决了,我也是刚学nginx,你这个问题我也碰到了。我是页面引用文件使用request获取当前环境地址,你可以调试下,引用的文件全部没找到。
location/{
proxy_passhttp://local_tomcat;
#nginx非80端口处理
proxy_set_headerHost$host:$server_port;
#获取真实IP
proxy_set_headerX-Real-IP$remote_addr;
#获取代理者的真实ip
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
#解决getScheme,isSecure,sendRedirect
proxy_set_headerX-Forwarded-Scheme$scheme;
client_max_body_size10m;
client_body_buffer_size128k;
#proxy_connect_timeout90;
#proxy_send_timeout90;
#proxy_read_timeout90;
proxy_buffer_size4k;
proxy_buffers432k;
proxy_busy_buffers_size64k;
proxy_temp_file_write_size64k;
}
把上面的proxy_pass修改成你自己的,其他的拷贝到你的nginx.conf中,就可以了。
B. 求nginx反向代理配置
没办法做这样的反向代理。
除非是
http://10.80.12.196:8080/8080/ -> http://10.80.12.198/8080/
http://10.80.12.196:8000/8000/ -> http://10.80.12.198/8000/
如果是这样的话,配置是这样的
location /8080 {
proxy_pass http://10.80.12.196:8080/;
proxy_redirect off;
}
location /8000 {
proxy_pass http://10.80.12.196:8000/;
proxy_redirect off;
}
proxy的其它参数就自己设置了,可以参考下
C. 为什么要用Nginx反向代理
一般来说公网延迟高,客户端与nginx之间的请求连接走公网,nginx先把这些请求缓存住,等这些请求数据全部完成之后nginx再向内网服务器请求,降低公网网络延迟成本,同时也降低一个连接占用服务端程序的时间。
原因:因为tcp不一定一次就能把全部数据传输完毕,所以一个连接可能需要等待很久才能把所有需要的数据都传输完毕,而这样的空闲连接如果都直接连
接到服务器上的话,会加重服务器负担,而nginx在这方面做了很大的优化,可以承载更多的连接,空闲连接也不会占据太多内存,所以nginx作为反向代
理能降低上游服务器的负载。
D. nginx反向代理为什么不成功
不成功的具体体现是什么?页面能正常显示吗,还是报400错或者其他错,被代理的地址直接访问有问题吗?
确定nginx 装好了吗?localhost能访问nginx的欢迎页面吗?
原始nginx.conf配置文件只需要改一下就可以实现反向代理
server{
listen 80;
server_name localhost;
location / {
#代理地址
proxy_pass http://192.168.1.1:8080;
}
}
配置完以后浏览器直接访问 localhost
确认80端口没有被防火墙限制,查看防火墙配置文件 vi /etc/sysconfig/iptables
如果没有80端口,就把 22 端口的配置复制一份,放在22端口下面一行,
修改好后重启防火墙 service iptables restart
再试试,纯手打。。。
负载均衡配置
upstream servers{
server 192.168.1.251:8080;
server 192.168.1.251:8081;
server 192.168.1.251:8082;
}
server {
listen 80;
server_name localhost;
location / {
#反向代理的地址
proxy_pass http://servers;
}
}
E. 路由怎么设置nginx反向代理
如已经安装好了nginx相关的环境,现仅展示相关的反向代理的配置。默认nginx.confi的配置,可能与下面的图会有不同,重要的是后面的配置。
已经安装好了nginx相关的环境,现仅展示相关的反向代理的配置。默认nginx.confi的配置,可能与下面的图会有不同,重要的是后面的配置。
-----注意查找nginx的默认配置文件,nginx.conf文件
修改设置代理
在nginx.conf配置中添加下图相关的配置,以线圈中的,其中的路径要以实际的配置文件路径为主
查看上面的配置中有引用/usr/local/u-mail/config/nginx/reverse-proxy.conf 配置文件.
检查测试配置
配置完后,使用nginx –t的命令测试一下,配置是否正确.是否有提示相关的错误.这个服务的路径要以具体的为主.
如配置有问题,按相关的提示进行更改.对比上面的配置信息进行查看.然后再重启下nginx的服务,使其加载刚刚的配置.
7
测试效果
再访问测试下相关的站点是否正常.是否会跳转到对应网站
8
除了nginx映射之外
我们还可以通过使用设置域名解析URL跳转来做(只有部分域名解析服务商才提供此项服务)
F. 为什么要用nginx来做反向代理
nginx 这个轻量级、高性能的 web server 主要可以干两件事情:
〉直接作为http server(代替apache,对PHP需要处理器支持);
〉另外一个功能就是作为反向代理服务器实现负载均衡
以下我们就来举例说明如何使用 nginx 实现负载均衡。因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的 mod_proxy和mod_cache结合使用也可以实现对多台app server的反向代理和负载均衡,但是在并发处理方面apache还是没有 nginx擅长。
1)环境:
a. 我们本地是Windows系统,然后使用VirutalBox安装一个虚拟的Linux系统。
在本地的Windows系统上分别安装nginx(侦听8080端口)和apache(侦听80端口)。在虚拟的Linux系统上安装apache(侦听80端口)。
这样我们相当于拥有了1台nginx在前端作为反向代理服务器;后面有2台apache作为应用程序服务器(可以看作是小型的server cluster。;-) );
b. nginx用来作为反向代理服务器,放置到两台apache之前,作为用户访问的入口;
nginx仅仅处理静态页面,动态的页面(php请求)统统都交付给后台的两台apache来处理。
也就是说,可以把我们网站的静态页面或者文件放置到nginx的目录下;动态的页面和数据库访问都保留到后台的apache服务器上。
c. 如下介绍两种方法实现server cluster的负载均衡。
我们假设前端nginx(为127.0.0.1:80)仅仅包含一个静态页面index.html;
后台的两个apache服务器(分别为localhost:80和158.37.70.143:80),一台根目录放置phpMyAdmin文件夹和test.php(里面测试代码为print “server1“;),另一台根目录仅仅放置一个test.php(里面测试代码为 print “server2“;)。
2)针对不同请求 的负载均衡:
a. 在最简单地构建反向代理的时候 (nginx仅仅处理静态不处理动态内容,动态内容交给后台的apache server来处理),我们具体的设置为:在nginx.conf中修改:
复制代码 代码如下:
location ~ \.php$ {
proxy_pass 158.37.70.143:80 ;
}
〉 这样当客户端访问localhost:8080/index.html的时候,前端的nginx会自动进行响应;
〉当用户访问localhost:8080/test.php的时候(这个时候nginx目录下根本就没有该文件),但是通过上面的设置 location ~ \.php$(表示正则表达式匹配以.php结尾的文件,详情参看location是如何定义和匹配的 http://wiki.nginx.org/NginxHttpCoreMole) ,nginx服务器会自动pass给 158.37.70.143的apache服务器了。该服务器下的test.php就会被自动解析,然后将html的结果页面返回给nginx,然后 nginx进行显示(如果nginx使用memcached模块或者squid还可以支持缓存),输出结果为打印server2。
如上是最为简单的使用nginx做为反向代理服务器的例子;
b. 我们现在对如上例子进行扩展,使其支持如上的两台服务器。
我们设置nginx.conf的server模块部分,将对应部分修改为:
复制代码 代码如下:
location ^~ /phpMyAdmin/ {
proxy_pass 127.0.0.1:80 ;
}
location ~ \.php$ {
proxy_pass 158.37.70.143:80 ;
}
上面第一个部分location ^~ /phpMyAdmin/,表示不使用正则表达式匹配(^~),而是直接匹配,也就是如果客户端访问的 URL是以http://localhost:8080/phpMyAdmin/ 开头的话(本地的nginx目录下根本没有phpMyAdmin目录),nginx会自动pass到127.0.0.1:80 的Apache服务器,该服务器对phpMyAdmin目录下的页面进行解析,然后将结果发送给nginx,后者显示;
如果客户端访问URL是http://localhost/test.php 的话,则会被pass到158.37.70.143:80 的apache进行处理。
因此综上,我们实现了针对不同请求的负载均衡。
〉如果用户访问静态页面index.html,最前端的nginx直接进行响应;
〉如果用户访问test.php页面的话,158.37.70.143:80 的Apache进行响应;
〉如果用户访问目录phpMyAdmin下的页面的话,127.0.0.1:80 的Apache进行响应;
3)访问同一页面 的负载均衡:
即用户访问http://localhost:8080/test.php 这个同一页面的时候,我们实现两台服务器的负载均衡 (实际情况中,这两个服务器上的数据要求同步一致,这里我们分别定义了打印server1和server2是为了进行辨认区别)。
a. 现在我们的情况是在windows下nginx是localhost侦听8080端口;
两台apache,一台是127.0.0.1:80(包含test.php页面但是打印server1),另一台是虚拟机的158.37.70.143:80(包含test.php页面但是打印server2)。
b. 因此重新配置nginx.conf为:
〉首先在nginx的配置文件nginx.conf的http模块中添加,服务器集群server cluster(我们这里是两台)的定义:
复制代码 代码如下:
upstream myCluster {
server 127.0.0.1:80 ;
server 158.37.70.143:80 ;
}
表示这个server cluster包含2台服务器
〉然后在server模块中定义,负载均衡:
复制代码 代码如下:
location ~ \.php$ {
proxy_pass http://myCluster ; #这里的名字和上面的cluster的名字相同
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;
}
这样的话,如果访问http://localhost:8080/test.php 页面的话,nginx目录下根本没有该文件,但是它会自动将其pass到myCluster定义的服务区机群中,分别由127.0.0.1:80;或者158.37.70.143:80;来做处理。
上面在定义upstream的时候每个server之后没有定义权重,表示两者均衡;如果希望某个更多响应的话例如:
复制代码 代码如下:
upstream myCluster {
server 127.0.0.1:80 weight=5;
server 158.37.70.143:80 ;
}
这样表示5/6的几率访问第一个server,1/6访问第二个。另外还可以定义max_fails和fail_timeout等参数。
综上,我们使用nginx的反向代理服务器reverse proxy server的功能,将其布置到多台apache server的前端。
nginx仅仅用来处理静态页面响应和动态请求的代理pass,后台的apache server作为app server来对前台pass过来的动态页面进行处理并返回给nginx。
通过以上的架构,我们可以实现nginx和多台apache构成的机群cluster的负载均衡。
两种均衡:
1)可以在nginx中定义访问不同的内容,代理到不同的后台server; 如上例子中的访问phpMyAdmin目录代理到第一台server上;访问test.php代理到第二台server上;
2)可以在nginx中定义访问同一页面,均衡 (当然如果服务器性能不同可以定义权重来均衡)地代理到不同的后台server上。 如上的例子访问test.php页面,会均衡地代理到server1或者server2上。
实际应用中,server1和server2上分别保留相同的app程序和数据,需要考虑两者的数据同步。
G. nginx反向代理root 一定要配置吗
nginx反向代理配置实例(前nginx+后apache)
我就拿我现在这个站的环境给大家看看..
如果是一台普通vps或者是独立服务器 ,,,首先我们要干的就是装环境和配置防火墙了..
首先我们配置下防火墙吧,
[[email protected] ~]# vim /etc/sysconfig/iptables
:wq! 保存退出
大家肯定会问 88 89 端口是干嘛的,,不用问了,等会看就知道了...
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 88 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
还有一件事需要做的就是selinux
可能大家会觉得我啰嗦.....错...这些 我主要是对新手来讲的,,,, 如果你是老手你跳到最下面看的我配置文件就行...
[[email protected] ~]# vim /etc/sysconfig/selinux 打开selinux 配置文件
在里面把所有的都注释掉新增一个
SELINUX=disabled
:wq! 保存退出
重启 服务器[[email protected] ~]# reboot
等
服务器重启完毕之后 我们就开始安装环境了.. 注意,,我给大家介绍的全部是yum 源安装 .喜欢编译的安装的自己
在编译安装之前需安装编译需要的依赖包以及 gcc 等等那些工具...在此我提醒大家.很多人 的服务器环境是最小化安装版, 最小化安装版是不适合
编译安装环境的..如果是的话请手动用 yum 安装所需要的编译环境.. 不说了 咱们开始
首先安装nginx吧 这种方法是教大家安装nginx 最新版本的..
[[email protected] ~]# vim /etc/yum.repos.d/CentOS-Base.repo
在最后一行加上如下内容
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
:wq! 保存退出
下面开始安装nginx了
[[email protected] ~]# yum install nginx
提示按 y
安装 mysql
[[email protected] ~]# yum install mysql-server
提示按 y
安装php
[[email protected] ~]# yum install php -y
提示按 y
安装php的扩展插件
[[email protected]
~]# yum install php-mysql php-gd libjpeg* php-ldap php-odbc php-pear
php-xml php-xmlrpc php-mbstring php-mcrypt php-bcmath php-mhash
libmcrypt libmcrypt-devel
好了.以上就是 lnmp 环境的完整 安装了.
接下来我们需要把 /etc/nginx/ 目录下面的nginx.conf 这个里面的内容全部修改
最好是先把默认的nginx.conf 这个配置文件备份下吧.
[[email protected] ~]#cd /etc/nginx
备份重新命名为 nginx.confbak
接下来新建立一个nginx.conf 配置文件
输入一下内容:
user nginx nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_tokens off;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
server
{
listen 80;
server_name www.51buyhost.com 51buyhost.com;
index index.html index.htm index.php;
root /data/51buyhost;
location / {
try_files $uri @apache;
}
location @apache {
internal;
proxy_pass http://127.0.0.1:88;
#include proxy.conf;
}
location ~ .*.(php|php5)?$
{
proxy_pass http://127.0.0.1:88;
# include proxy.conf;
}
location /status {
stub_status on;
access_log off;
}
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
access_log off;
expires 30d;
}
location ~ .*.(js|css)?$
{
access_log off;
expires 12h;
}
access_log /data/log/51buyhost/access.log;
}
include /etc/nginx/conf.d/*.conf;
H. 使用nginx反向代理到谷歌可行吗
如果nginx可以访问谷歌,则可以通过nginx反向代理到谷歌
但注意一点,如果短时间内,大量不同的访客通过同一个IP地址(nginx的IP)访问谷歌,可能会被谷歌认为是非法访问,要求输入验证码才可继续访问,可能会影响体验
I. nginx能实现soket反向代理吗
nginx能实来现soket反向代理
通过这个模块,自代理后端其它协议应用,如mysql, nosql之类的
比如用Node.JS写了一些TCP服务,那么Nginx就可以给这些Node.JS做TCP代理,比如开启多个Node.JS监听不同的端口,经过Nginx TCP代理到upstream实现负载均衡,Nginx比Haproxy的优势还在于Nginx能够提供HTTP/HTTPS服务,可以处理静态资源,或者把一些其他请求交给其他语言来处理,比如可以把一些输出HTML页面的请求fastcgi_pass给PHP-FPM处理,总而言之,Nginx更像是在做一个可扩展的Web开发系统.另外,Nginx已经支持WebSocket反向代理,而移动浏览器对HTTP上的全双工通信WebSocket的支持还是不错的,只是还没有足够成熟.
J. nginx 反向代理支持域名吗
你是想用nginx反向代理转发域名吗?
是不是为了去除域名的端口,所以想进行反向代理的
可以看看这文章,无论你是用的是nginx还是其他web服务器,都可以一键转发!
需要给多少个域名去掉端口号,就输入多少个域名吧。
你可以看看这个http://jingyan..com/article/03b2f78c0b33e05ea237ae0a.html