nginx 限制ip访问如何实现多个子站的访问

Nginx配置多站点vhost的方法实例 - 编程技术 - phpStudy
微信公众号
当前位置:&&Nginx配置多站点vhost的方法实例本文主要和大家介绍Nginx 配置多站点vhost 的方法,需要的朋友可以参考下,希望能帮助到大家。假设你想在Linux Nginx中用不同的域名访问不同的目录,这时就要配置多个vhost,具体配置如下,假设网站根目录设定在/var/www/1、在/var/www/下新建两个目录/var/www/ushark.net
/var/www/ushark.wang& &2、编辑/etc/nginx/nginx.confhttp&{
&&include&&&&/etc/nginx/mime.
&&default_type&application/octet-
&&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&
&&sendfile&&&&
&&#tcp_nopush&&&
&&keepalive_timeout&65;
&&include&/etc/nginx/conf.d/*.   #主要是加入此行,如有则忽略
}& &3、在/etc/nginx/conf.d下新建两个conf文件,&&&
/etc/nginx/conf.d/ushark.net.conf
/etc/nginx/conf.d/ushark.wang.conf& &4、复制如下配置信息到两个文件中,只要修改红色部分内容  !!! server_name与root保持一致即目录和域名一一对应 !!!&&&
&&listen&&&&80;
&&server_name&&www.ushark.
&&#charset&koi8-r;
&&#access_log&/var/log/nginx/host.access.log&
&&root&&/var/www/ushark.net/;
&&if&(!-e&$request_filename){&  # rewrite可根据网站需要增删
&&&&&&rewrite&^/(.*)&/index.php&
&&location&/&{
&&&&index&index.php&index.html&index.
&&#error_page&404&&&&&&&/404.
&&#&redirect&server&error&pages&to&the&static&page&/50x.html
&&error_page&&500&502&503&504&/50x.
&&location&=&/50x.html&{
&&&&root&&/var/www/ushark.net/;
&&#&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$&{
&&&&fastcgi_index&&index.
&&&&fastcgi_pass&&127.0.0.1:9000;
&&&&include&&&&&&fastcgi_
&&&&fastcgi_param&&SCRIPT_FILENAME&&$document_root$fastcgi_script_
&&&&fastcgi_param&&SCRIPT_NAME&&&&$fastcgi_script_
&&#&deny&access&to&.htaccess&files,&if&Apache's&document&root
&&#&concurs&with&nginx's&one
&&#location&~&/\.ht&{
&&#&&deny&
}& &5、重启Nginx
systemctl&restart&nginx& &6、 编辑/etc/hosts  !!! 核心步骤 !!![root@bogon&~]# vi&127.0.0.1&&&&localhost.localdomain&localhost
::1&&&&&&&localhost6.localdomain6&localhost6
127.0.0.1&&&&www.ushark.net
127.0.0.1&&&&www.ushark.wang& &←
相关阅读:最新文章热门文章
PHP中文网:独家原创,永久免费的在线
,php技术学习阵地!
http://www.php.cn/ All Rights Reserved | 皖B2-
关注微信公众号nginx 如何实现多个 web 应用共用一个端口一个域名?
09:58:54 +08:00 · 10131 次点击
32 回复 &| &直到
11:49:41 +08:00
& & 10:02:54 +08:00 via iPhone
用不同入口 /目录啊
& & 10:03:04 +08:00
你这问题让我也想问一个问题,如何让两个妹子同时爱上我....
& & 10:08:56 +08:00
@ 能具体点吗?
& & 10:08:57 +08:00
这不就是这样子嘛
& & 10:09:55 +08:00
@ 同时戳瞎两个妹子的眼\(^o^)/~
& & 10:10:20 +08:00
可以设置 Cookie 或者不同应用之间的特征码以区别应用,比如有 A 和 B 两个应用,就可以设置 Cookie
application=a ,然后将所有请求转发到应用中。
& & 10:22:17 +08:00
@ 请问这在 nginx 要怎么设置啊?
& & 10:22:46 +08:00
在域名后面加路径,就像 4 楼说的那样
& & 10:29:52 +08:00 via iPhone
@ 不同路径 proxy pass 到不同 backend 。
& & 10:47:36 +08:00
location /app1 {
....rewrite /app1/(.*) /$1
....proxy_
....proxy_
....proxy_set_header Host $proxy_
....proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_
}
大概这样子,具体还请自行 google
ps :为什么不用二级域名反向代理呢?
& & 10:53:16 +08:00
& & 11:17:59 +08:00 via Android
@ 浏览器同时开两个应用会发生什么?
& & 11:58:37 +08:00
@ 同一个 Cookie 只能保持一个值啊,所以不会发生同时打开两个的情况,除非代码实现有问题。
& & 12:03:15 +08:00
域名:目录:端口
& & 12:32:43 +08:00 via Android
@ 这个最佳实践我给满分。
& & 13:02:36 +08:00 via Android
& & 13:07:22 +08:00
可以用请求 url 区分不同的 web 服务器,配置文件类似于:
location /mail/ {
location /com/ {
location / {
可以参考这篇文章:
& & 13:47:58 +08:00
如果你说的域名可以是
那就很简单。
& & 14:41:14 +08:00
同域名,同端口,那就要不同路径了..
& & 14:41:44 +08:00
你要把 3 个不同站点放到同一个 web 根目录入边
& & 14:48:21 +08:00
http 里面有种东西叫 Host
& & 15:15:33 +08:00 via Android
楼上正解, ng 可以配置多个 host
& & 15:27:14 +08:00
server_name
& & 10:07:43 +08:00
@ lz 问的是同一个域名
@
& & 11:11:38 +08:00
反向代理就是干这个活的
& & 13:23:29 +08:00 via Android
同一个端口,同一个域名,又不想用 URL 或子域名,难道是要弄 load balance ?
& & 15:06:29 +08:00 via iPhone
@ 也不是,你猜
& & 17:48:15 +08:00
& &177 天前
@ 我也是想搞个这样的:
你在 10 楼的回复,意思是不是这样:
server app1, example.com:port1
server app2, example.com:port2
server app3, example.com:port3
location app1, 反向代理到 example.com:port1,
location app2, 反向代理到 example.com:port2,
& &177 天前
@ 楼主说的是同一个域名同一个端口
& &177 天前
@ 谢谢这么快回复哈~。
我的目标和楼主的也是一样,入口是同一个入口,通过 xxx.com/app1 xxx.com/app2 来区分业务。所以想问下我对你在 10 楼回复的理解是不是对的,通过 xxx.com/app1 访问,通过 location 反向代理到 xxx.com:port1。
& &177 天前
& · & 1793 人在线 & 最高记录 3541 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.1 · 17ms · UTC 06:22 · PVG 14:22 · LAX 23:22 · JFK 02:22? Do have faith in what you're doing.Nginx实现多个站点使用一个端口(配置Nginx的虚拟主机)
是一个轻量级高性能的 Web 服务器, 并发处理能力强, 消耗资源小, 无论是静态服务器还是网站, Nginx 表现更加出色, 作为 Apache 的补充和替代使用率越来越高,目前很多大型网站都在使用Nginx做为 Web 服务器,例如:。另外淘宝研发大军针对大访问量网站的需求,对Nginx做了专门的定制,添加了很多高级功能和特性(),Tengine的性能和稳定性已经在大型的网站如,等得到了很好的检验。
本文将讲解如何在Ubuntu Linux上使用 Nginx Web服务器来实现一台电脑一个端口(80)搭建多个网站。
绝大多数的 Nginx 运行在 Linux 机器上, 虽然有 Windows 移植版,但在Windows下的测试发现Nginx发挥不是很好. 所以本文将以 Linux 为例讲解, 而 Mac OS 或其他 Unix like 机器上的操作应该是一样的.
lg@lg-PC:~$ nginx -v
nginx version: nginx/1.3.10
nginx配置文件默认目录结构
/etc/nginx/
├── conf.d
├── default.conf
├── example_ssl.conf
├── fastcgi.conf
├── fastcgi_params
├── koi-utf
├── koi-win
├── mime.types
├── nginx.conf
├── scgi_params
├── uwsgi_params
└── win-utf
1 directory, 11 files
增加 Nginx 虚拟主机
配置 Virtual host 步骤如下:
1.检查/etc/nginx/nginx.conf配置文件,确保文件中有:include /etc/nginx/conf.d/*.
worker_processes
/var/log/nginx/error.
/var/run/nginx.
worker_connections
debug_connection 127.0.0.1;
debug_connection 192.168.1.0/24;
/etc/nginx/mime.
default_type
application/octet-
log_format
'$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.
keepalive_timeout
client_max_body_size
include /etc/nginx/conf.d/*.
2.关键步骤,在目录/etc/nginx/conf.d/下面新建文件site1.conf,site2.conf,文件名任意写,自己看明白就OK,后缀名需要与步骤1配置的一致,这里为.conf。site1代表我们的第一个站点,site2代表我们的第二个站点,下面我们看看两个文件都需要写点什么:
site1.conf:
server_name ~^\d+\.\d+\.\d+\.\d+$;
#charset koi8-r;
error_page
# redirect server error pages to the static page /50x.html
error_page
500 503 504
error_log /var/log/nginx/debug.
index index.html index.
root /home/lg/www/;
location /svn {
root /home/lg/www/;
index index.
location = /favicon.ico {
try_files $uri $uri/favicon.ico /home/lg/www/favicon.ico =404;
location /share {
root /home/lg/D
# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store(Mac).
location ~ /\. {
location ^~ /packages {
root /home/lg/Downloads/1
autoindex_exact_
autoindex_
location ^~ /Music {
root /home/lg/;
autoindex_exact_
autoindex_
location ^~ /Videos {
root /home/lg/;
autoindex_exact_
autoindex_
location ^~ /html5 {
root /home/lg/workspace/nodejs/;
index index.html index.
location ^~ /NginxStatus {
stub_status
access_log
#auth_basic 'NginxStatus';
#auth_basic_user_file conf.d/htpasswd
location = /50x.html {
/usr/share/nginx/
location = /404.html {
/usr/share/nginx/
site2.conf:
server_name
~^openlg.net$;
/home/lg/workspace/phpworkspace/
index index.php index.html index.
location = /favicon.ico {
try_files /home/lg/www/favicon.ico =404;
# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store(Mac).
location ~ /\. {
location ~* /(?:uploads|files)/.*\.php$ {
location / {
try_files $uri $uri/ /index.php?$
location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 24h;
error_page
error_page
500 502 503 504
location = /50x.html {
/usr/share/nginx/
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param
SCRIPT_FILENAME $document_root$fastcgi_script_
fastcgi_pass
127.0.0.1:9000;
3.测试配置文件,没问题就加载新配置文件
lg@lg-PC:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
lg@lg-PC:~$ sudo kill -HUP `cat /var/run/nginx.pid`
lg@lg-PC:~$
4.打开文件/etc/hosts,添加
openlg.net
5.打开浏览器分别请求下面的地址进行测试,如果相应内容不一样,那么咱们就大功告成了。
http://127.0.0.1
http://openlg.net
到这里,大家也许已经明白怎么回事了,我再罗嗦两句,我这里的site1.conf相当与一个静态文件服务器,site2.conf是一个php的网站,大家可以看到配置文件中加粗显示的两行:listen和server_name分别代表监听端口和虚拟主机名称。80端口没得说,重点解释下server_name,server_name用的是正则表达式,~^\d+\.\d+\.\d+\.\d+$匹配所有的ip地址,~^openlg.net$匹配openlg.net,这里也可以直接写成server_name
127.0.0.1;或者server_name
当我们请求http://127.0.0.1/时,nginx会使用两个server_name配置的正则表达式分别去测试请求地址中的127.0.0.1来决定使用那个虚拟主机,这里当然就是使用site1.conf中配置的server了。当我们请求http://openlg.net/时,nginx就会选择使用site2.conf中配置的server了。
没有更多推荐了,怎么简单的利用nginx发布多个域名
按时间排序
首先考虑的就是分布式、负载均衡等经常听到的It名词。那网站如何才能实现负载均衡呢,除了世面上的一些负载均衡器外,我们有哪些软件上的解决方案呢,这时候,Nginx、lvs等名词就会在脑海中浮现。那这些负载均衡的软件如何使用呢,如何读者是.net工程师,大家会选择Nginx,因为它支持Windows服务器!
在Nginx log配置中添加$http_host就可以记录来来访域名
可以使用$host去判断,if ($host ~* XXX) {retrun 400;}
作为二楼,我深感责任重大,要是我不回复,楼主还以为自己玩的是单机版的百度,另外我要摸四楼的狗头,我之所以不摸三楼,是因为怕有孙子跟我抢二楼,一不小心就摸了自己
listen 80; server_name _;return 400;
如果你的配置文件没有错,你添加的是新的域名的话,有没有可能是你的域名没有被正常的dns服务器解析?建议检查一下网卡里面的DNS=888.888.88.88这个,然后本地nslookup 解析一下你的域名看看,能不能正常的解析出来ip,然后反向解析一下。如果不是这个问题的话,那就还是nginx的配置文件的逻辑有问题了。分开来一点一点分析一下,期待你尽快解决。
已经安装好了nginx相关的环境,现仅展示相关的反向代理的配置。默认nginx.confi的配置,可能与下面的图会有不同,重要的是后面的配置。
deny from all
感谢您为社区的和谐贡献力量请选择举报类型
经过核实后将会做出处理感谢您为社区和谐做出贡献
确定要取消此次报名,退出该活动?
请输入私信内容:nginx+多tomcat实现单IP、多域名、多站点的访问
其实这个问题分为两个子问题来解决:
1.如何实现单IP多tomcat站点
2.对于多域名的多个站点如何通过nginx分发访问
问题一:解决方案又分为两种:
a.单实例tomcat配置多个host站点 这种方法有一个缺点就是无法分站点调试,如果一个站点出了问题,关服务进行调试会停掉所有站点(不过这个方案就不会涉及到第二个问题,因为这样单实例无法实现多个站点对应多个顶级域名)
b.多实例tomcat配置实现单机多站点 这个方法很简单,就相当于把tomcat拷贝多份,然后修改各个tomcat的server.xml中的shutdown,http以及AJP1.3的端口,然后将tomcat实例启动即可。不过这个对内存要求比较高,因为每个tomcat跑起来之后可能会占200M左右内存,这还是对并发量比较小的,如果实例数一多起来,比如我们现在有个项目需要20多个站点放在一台服务器上(主要是贪腐无处不在,钱有但是不给你买硬件。。无力吐槽。。。。),这样4G多的内存就吃掉了。 另外一点就是通过多实例配置多站点会有另外一个问题,可能每一个站点都有一个单独的顶级域名,而域名的解析止于IP,因此端口的映射需要自己另做,这就涉及到了第二个问题如何解决了。
具体如何配置多实例实现单机多站点,可以参照下面几个链接: http://weihaoma.cn/archives/67 http://www.ff-bb.cn/logs/.html
上面我说到可能会有内存溢出的问题,可以看看第二个链接中的解决方案,直接修改tomcat的内存参数,如果是linux直接修改catalina.sh即可,如果是windows的话需要修改注册表中Java的参数:HKEY_LOCAL_MACHINESOFTWAREApache Software FoundationProcrun 2.0tomcat6.0ParametersJava 总体来讲问题一比较好解决,原理上很简单,单个实例无法调试就用多个实例,多个实例需要多个端口,当内存不足时修改它的启动参数,然后重启就行了。
问题二:这里我只说用nginx怎么解决,网上有人apache貌似也能解决,我没有弄成功 nginx是俄罗斯人写的一个开源的web服务器,国内的使用先驱是淘宝,而且貌似他们的工程师在写一本叫《nginx从入门到精通》的书。nginx是一个非常优秀的web服务器,可以说前途一片光明。 一般nginx现在多用户做负载均衡,配合tomcat或者apache做分发,网上这个讲的也很多,但是我要解决的问题不太相同,怎么样通过域名解析到不同端口,这得先说以下nginx的配置文件。
nginx配置文件位于conf/nginx.conf,它最主要的部分是http部分,这里最重要的两个配置项是upstream,server,这两个项都可以有多个配置。
#需要进行负载均衡的站点
#其中server是其中负载均衡的一个节点www.aaa.com
upstream www.aaa.com {
server 192.168.0.1:8080 weight=1;
server 192.168.0.2:8080 weight=2;
server 192.168.0.1:8081 weight=3;
#第二个网站的www.bbb.com的负载均衡的节点
upstream www.bbb.com {
server 192.168.1.1:8080 ;
server 192.168.1.2:8080 ;
server 192.168.1.3:8080 ;
#同一服务器转发2个不同域名进行负载均衡
#www.aaa.com的server
listen 80;
server_name www.aaa.
location / {
index index.html index.
#这里的proxy_pass转发的是upstream的名字www.aaa.com
proxy_pass http://www.aaa.
proxy_set_header X-Real-IP $remote_
client_max_body_size 100m;
#limit_conn crawler 20;
listen 80;
server_name www.bbb.
location / {
index index.html index.
#这里的proxy_pass转发的是upstream的名字www.bbb.com
proxy_pass http://www.bbb.
proxy_set_header X-Real-IP $remote_
client_max_body_size 100m;
#limit_conn crawler 20;
tomcat配置 :
//接下来更改三个端口号
&Server port="18005"shutdown="SHUTDOWN"&
&Connector port="8801"protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"URIEncoding='UTF-8'/&
//tomcatX 在这里表示不同的tomcat,我的两个 tomcat 分别使用 tomcat1和tomcat2; 这个设置是主要用以tomcat的集群。
&Connector port="18009"protocol="AJP/1.3"redirectPort="8443"jvmRoute="tomcatX"/&
DNS服务器将域名解析到IP地址,nginx作为反向代理收到请求之后根据配置文件将请求发送到对应的tomcat实例。 我测试时nginx反向代理放在我本机上,tomcat实例在同一台远程服务器,在hosts文件中虚拟两个域名假设为两实例中的站点的域名。 hosts文件路径C:WindowsSystem32driversetc
127.0.0.1 www.aaa.com
127.0.0.1 www.bbb.com
我已经测试过,这个方案是可行的,参考链接如下: http://saiyaren.iteye.com/blog/1405728 http://yangzb.iteye.com/blog/560421 http://www.linuxde.net/06.html
没有更多推荐了,}

我要回帖

更多关于 nginx 跨域访问配置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信