最近公司需要搭建一个内容管理系统,用的框架是dedecms,没有多考虑,首选的就是apache,因为公司的服务器是centos,所以一通折腾之后安装好了apache,php,以及各种模块及依赖库。
在安装好之后启动apache,发现无法启动,说是80端口被占用,经过netstat -anp | grep 80 之后发现是ngnix占用了该端口。因为这台服务器一直在使用nginx + unicorn 来跑rails项目,所以这个nginx是万万不能停掉的,怎么办?
1、修改apache启动时的默认端口,找到apache的配置文件(httpd.conf),将Listen 80 改为 Listen 8080 保存退出,然后重启apache,这个时候发现apache已经启动了,ok,到此为止,端口冲突问题解决了
2、接下来,访问项目目录:117.79.111.xx:8080,你会发现无法访问到apache的跟路径。
3、配置防火墙,让8080可以让外网进行访问。打开防火墙配置文件/etc/sysconfig/iptables,在这个文件里面你会发现一个关于80端口的配置:-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 这个是服务器开启的默认端口,允许外网进行访问的,那么如果我们想让8080端口允许外网访问的话,那么我们就在这一句的下面加上-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT,保存退出,然后重启防火墙,这个时候我们在通过117.79.111.xx:8080来访问的话,你会发现已经可以访问apache根路径了,如果反问我们的项目的话,我们要加入项目路径(比如说是dedecms),那么我们就要这样117.79.111.xx:8080/dedecms。
4、我们发现每次访问项目的话,都要使用ip加端口,再加项目目录的形式才能访问,这无疑是危险的,并且是很傻的,接下来我们配置apache文件,使用域名代替ip来实现项目的访问,如下:找到apache配置文件httpd.conf,在文件的最后添加一下内容
<VirtualHost *:8080>
ServerName cms.xxx.com
DocumentRoot /var/www/dedecms
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/dedecms>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/zuzher_cms_error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
</VirtualHost>
保存退出,然后重启apache,访问 http://cms.xxx.com:8080,你会发现我们的项目已经可以通过域名来访问了。
5、虽然到上面为止我们可以通过域名正确的访问项目了,但是问题是,我们每次都要输入8080的端口号才能正确访问,这个着实不爽,要怎么办呢。还记得我刚开始说的,项目中有用nginx + unicorn 来跑rails么,只不过那样是使用nginx 做前端,unicorn做后端,然后通过代理的形式实现nginx 和unicorn之间的通讯。既然unicorn可以,那么apache一定也是可以的,接下来我们就用nginx 做前端,apache做后端,来实现这个端口转发的功能。上面的apache配置文件保持不动,接下来我们编辑nginx配置文件/usl/local/nginx/conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream app1_server {
server unix:/home/naitnix/workspace/app1/tmp/sockets/unicorn.sock fail_timeout=0;
}
upstream cms_server{
server 117.79.111.xx:8080;
}
include /usr/local/nginx/conf/services/app1.conf;
include /usr/local/nginx/conf/services/cms.conf;
}
上面的app1_server是我们的rails项目,cms_server是我们现在要做的cms的配置。这里我们指定我们服务器的地址和端口号。然后你可以看见我include了两个项目的配置文件,这是为了方便项目管理,我新建了一个servers目录,所有的项目配置信息都放到了这个里面。其中app1.conf是我们的rails的项目配置文件,而cms.conf则是我们这个cms项目要用到的,接下来我们进入这个cms文件,来编辑里面的内容:
server {
listen 80;
server_name cms.xxx.com;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering on;
proxy_pass http://cms_server;#这里指定上面的cms_server de upstream
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
保存,并重启nginx,然后我们访问我们的cms.xxx.com,这个时候你会发现我们不用输入8080端口号就可以访问我们的项目了。这样nginx将请求转发到apache 的8080端口来实现我们访问8080端口的目的。
以上写的比较草率,很多细节地方我没有提到,希望能给各位提供帮助,也希望各位能提宝贵意见,谢谢。
参考文章:
http://www.sqlstudy.com/article/nginx-proxy-apache-configure.html
http://www.imhdr.com/nginx/to-configure-nginx-front-end-apache-backend-server/
http://wiki.octopusinfo.com/index.php/Linux%E6%8A%80%E5%B7%A7:%E7%BD%91%E7%AB%99%E7%AF%87:Nginx_%E8%BD%AC%E5%8F%91%E8%87%B3_Apache
分享到:
相关推荐
### Nginx+Apache+MySQL+PHP+Memcached+Squid 搭建门户网站 #### 一、前言与架构概述 随着互联网技术的发展,如何构建一个高效、稳定且能够应对高并发访问的Web服务器成为了许多企业和开发者关注的重点。本文将...
- **Nginx 负责负载均衡**:根据预设规则将请求转发给后端的真实服务器(如 Apache 服务器)。常见的负载均衡策略包括轮询(默认)、最少连接数、IP 哈希等。 - **响应返回给用户**:真实服务器处理完请求后,将响应...
在本场景中,Tomcat作为实际处理业务逻辑的应用服务器,接收到Nginx转发过来的请求,执行相应的Java代码并返回结果。多台Tomcat可以通过Nginx的负载均衡策略协同工作,提高整体处理能力。 在实际部署过程中,你需要...
在Nginx的配置文件中,我们可以定义一个upstream模块,列出所有Tomcat服务器的IP和端口,并选择合适的策略进行分配。例如: ```nginx upstream tomcat_cluster { server 192.168.1.101:8080; server 192.168.1....
每个Tomcat实例应配置不同的监听端口,以便Nginx可以区分并分发请求。 对于Redis,需要在所有相关服务器上安装并配置。为了实现高可用性,可以采用主从复制或者哨兵(Sentinel)系统来监控和自动故障转移。同时,合理...
2. 配置Nginx:编写Nginx配置文件,设置反向代理规则,指向Tomcat实例的IP和端口,同时配置SSL证书和密钥。 3. 配置Tomcat:在Tomcat的server.xml文件中调整监听端口,以避免与Nginx冲突。 4. 集群配置:对于HTTP...
3. Nginx配置:Nginx作为反向代理服务器,它接收来自外部的请求,并将这些请求转发到Apache和Resin。在Nginx的`sites`配置文件中,创建一个名为`test.zen.com`的server块,设置server_name、access_log、gzip、...
Nginx 的主配置文件通常是 `nginx.conf`,包含多个 server 块,每个 server 块定义了一个监听的端口和相应的处理规则。 **3. Nginx 代理服务** 3.1 正向代理与反向代理概念 正向代理是指客户端主动设置代理服务器...
在本案例中,Nginx作为前端服务器,处理客户端的请求,并根据策略将这些请求转发到后面的Tomcat服务器集群。 Tomcat是Apache软件基金会的Java Servlet和JavaServer Pages(JSP)应用服务器,通常用于部署Java Web...
【Nginx+Tomcat在Windows下做负载均衡】 负载均衡是一种网络技术,它通过将流入的网络流量分发到多个服务器,以提高服务的可用性和响应速度,防止单个服务器过载。在这个场景中,Tomcat作为Java应用服务器,由于...
- **启动Nginx**:使用`./sbin/nginx`命令启动Nginx服务,并确保防火墙允许通过`8000`端口。 #### 4. 配置Nginx - **定义Upstream**:在`nginx.conf`的`http`部分定义`tomcat`的`Upstream`,指定两台Tomcat服务器...
- 负载均衡器 (这里是 Nginx) 接收客户端的请求,并根据预先设定的规则将请求转发到后端服务器。 - 在本案例中,Nginx 使用加权轮询算法 (`weight` 参数) 分配请求。 #### 六、总结 通过以上步骤,我们成功地...
Linux + Apache(Nginx) + MySQL + PHP,简称LAMP或LNMP,是两种常见的Web服务器架构,分别基于Apache和Nginx作为Web服务器。这两种架构都是为了搭建动态网站和Web应用程序,支持高并发和高性能。以下是它们的配置...
3.这里只需要修改Nginx的配置,让它通过tomcat来转发,所以我们在这一步只需要在nginx.conf中添加几行代码就行。 如果看不懂 。建议直接拿我替来用。 Copy下面的内容 替换 你的nginx.conf注意黄色端口要改为你的。 ...
Nginx配置文件(通常为`nginx.conf`)需要设置反向代理规则,将用户请求转发到Tomcat服务器。例如: ```nginx http { upstream tomcat_servers { server localhost:8080; } server { listen 80; location /...
- 资源消耗低:相比Apache等其他Web服务器,Nginx在处理静态文件时更节省内存资源。 - 易于配置与管理:配置文件简单直观,易于理解与修改。 - **应用场景**: - 反向代理:作为负载均衡器,将请求分发到后端...
这里,`proxyName`和`proxyPort`属性指定了Nginx的公共域名和端口。 为了实现高可用性,我们还需要在多台服务器上部署Tomcat实例,并通过负载均衡器(如Nginx)进行健康检查和故障转移。Nginx提供了`health_check`...
标题中的"Nginx+Tomcat 64位免安装"是指一种组合配置,它将64位版本的Nginx Web服务器与64位版本的Apache Tomcat应用服务器结合在一起,而无需进行常规的安装过程。这种配置常用于提供高性能、高并发的Web服务,特别...
2. 监听端口:通过`listen`指令指定Nginx监听的端口。 3. 虚拟主机:使用`server_name`指令定义虚拟主机的域名,支持正则匹配。 4. 静态文件处理:通过`root`或`alias`指令设置静态文件路径,Nginx能高效地发送静态...
在集群中,Nginx主要负责接收客户端请求,进行负载均衡,将请求转发到后端的Tomcat服务器,并缓存静态内容,减轻后端服务器的压力。 2. **Memcache**:Memcache是一种分布式内存对象缓存系统,用于临时存储(缓存)...