RadarURL

소프트웨어
2013.04.08 08:42

Nginx 와 Apache 동시사용 설정 (영문)

조회 수 3925 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

Reconfiguring Apache

There are two main aspects of your Apache configuration that will need to be edited in order to allow both Apache and Nginx to work together at the same time. But let us first clarify where we are coming from, and what we are going towards.

Configuration overview

At this point, you probably have the following architecture set up on your server:

  • A web server application running on port 80, such as Apache
  • A dynamic server-side script processing application such as PHP, communicating with your web server via CGI, FastCGI, or as a server module

The new configuration that we are going towards will resemble the following:

  • Nginx running on port 80
  • Apache or another web server running on a different port, accepting requests coming from local sockets only
  • The script processing application configuration will remain unchanged

As you can tell, only two main configuration changes will be applied to Apache as well as the other web server that you are running. Firstly, change the port number in order to avoid conflicts with Nginx, which will then be running as the frontend server. Secondly, (although this is optional) you may want to disallow requests coming from the outside and only allow requests forwarded by Nginx. Both configuration steps are detailed in the next sections.

Resetting the port number

Depending on how your web server was set up (manual build, automatic configuration from server panel managers such as cPanel, Plesk, and so on) you may find yourself with a lot of configuration files to edit. The main configuration file is often found in /etc/httpd/conf/ or /etc/apache2/, and there might be more depending on how your configuration is structured. Some server panel managers create extra configuration files for each virtual host.

There are three main elements you need to replace in your Apache configuration:

  • The Listen directive is set to listen on port 80 by default. You will have to replace that port by another such as 8080. This directive is usually found in the main configuration file.
  • You must make sure that the following configuration directive is present in the main configuration file: NameVirtualHost A.B.C.D:8080, where A.B.C.D is the IP address of the main network interface on which server communications go through.
  • The port you just selected needs to be reported in all your virtual host configuration sections, as described below.

The virtual host sections must be transformed from the following template

<VirtualHost A.B.C.D:80>
ServerName example.com
ServerAlias www.example.com
[...]
</VirtualHost>

to the following:

<VirtualHost A.B.C.D:8080>
ServerName example.com:8080
ServerAlias www.example.com
[...]
</VirtualHost>

In this example, A.B.C.D is the IP address of the virtual host and example.com is the virtual host's name. The port must be edited on the first two lines.

Accepting local requests only

There are many ways you can restrict Apache to accept only local requests, denying access to the outside world. But first, why would you want to do that? As an extra layer positioned between the client and Apache, Nginx provides a certain comfort in terms of security. Visitors no longer have direct access to Apache, which decreases the potential risk regarding all security issues the web server may have. Globally, it's not necessarily a bad idea to only allow access to your frontend server.

The first method consists of changing the listening network interface in the main configuration file. The Listen directive of Apache lets you specify a port, but also an IP address, although, by default, no IP address is selected resulting in communications coming from all interfaces. All you have to do is replace the Listen 8080 directive by Listen 127.0.0.1:8080; Apache should then only listen on the local IP address. If you do not host Apache on the same server, you will need to specify the IP address of the network interface that can communicate with the server hosting Nginx.

The second alternative is to establish per-virtual-host restrictions:

<VirtualHost A.B.C.D:8080>
ServerName example.com:8080
ServerAlias www.example.com
[...]
Order deny,allow
allow from 127.0.0.1
allow from 192.168.0.1
eny all
</VirtualHost>

Using the allow and deny Apache directives, you are able to restrict the allowed IP addresses accessing your virtual hosts. This allows for a finer configuration, which can be useful in case some of your websites cannot be fully served by Nginx.

Once all your changes are done, don't forget to reload the server to make sure the new configuration is applied, such as service httpd reload or /etc/init.d/ httpd reload.

Configuring Nginx

There are only a couple of simple steps to establish a working configuration of Nginx, although it can be tweaked more accurately as seen in the next section.

Enabling proxy options

The first step is to enable proxying of requests from your location blocks. Since the proxy_pass directive cannot be placed at the http or server level, you need to include it in every single place that you want to be forwarded. Usually, a location / { fallback block suffices since it encompasses all requests, except those that match location blocks containing a break statement.

Here is a simple example using a single static backend hosted on the same server:

server {
server_name .example.com;
root /home/example.com/www;
[...]
location / {
proxy_pass http://127.0.0.1:8080;
}
}

In the following example, we make use of an Upstream block allowing us to specify multiple servers:

upstream apache {
server 192.168.0.1:80;
server 192.168.0.2:80;
server 192.168.0.3:80 weight=2;
server 192.168.0.4:80 backup;
}
server {
server_name .example.com;
root /home/example.com/www;
[...]
location / {
proxy_pass http://apache;
}
}

So far, with such a configuration, all requests are proxied to the backend server; we are now going to separate the content into two categories:

  • Dynamic files: Files that require processing before being sent to the client, such as PHP, Perl, and Ruby scripts, will be served by Apache
  • Static files: All other content that does not require additional processing, such as images, CSS files, static HTML files, and media, will be served directly by Nginx

We thus have to separate the content somehow to be provided by either server.

Separating content

In order to establish this separation, we can simply use two different location blocks—one that will match the dynamic file extensions and another one encompassing all the other files. This example passes requests for .php files to the proxy:

server {
server_name .example.com;
root /home/example.com/www;
[...]
location ~* \.php.$ {
# Proxy all requests with an URI ending with .php*
# (includes PHP, PHP3, PHP4, PHP5...)
proxy_pass http://127.0.0.1:8080;
}
location / {
# Your other options here for static content
# for example cache control, alias...
expires 30d;
}
}

This method, although simple, will cause trouble with websites using URL rewriting. Most Web 2.0 websites now use links that hide file extensions such as http://example.com/articles/us-economy-strengthens/; some even replace file extensions with links resembling the following:http://example.com/useconomy- strengthens.html.

When building a reverse-proxy configuration, you have two options:

  • Port your Apache rewrite rules to Nginx (usually found in the .htaccess file at the root of the website), in order for Nginx to know the actual file extension of the request and proxy it to Apache correctly.
  • If you do not wish to port your Apache rewrite rules, the default behavior shown by Nginx is to return 404 errors for such requests. However, you can alter this behavior in multiple ways, for example, by handling 404 requests with the error_page directive or by testing the existence of files before serving them. Both solutions are detailed below.

Here is an implementation of this mechanism, using the error_page directive :

server {
server_name .example.com;
root /home/example.com/www;
[...]
location / {
# Your static files are served here
expires 30d;
[...]
# For 404 errors, submit the query to the @proxy
# named location block
error_page 404 @proxy;
}

location @proxy {
proxy_pass http://127.0.0.1:8080;
}
}

Alternatively, making use of the if directive from the Rewrite module:

server {
server_name .example.com;
root /home/example.com/www;
[...]
location / {
# If the requested file extension ends with .php,
# forward the query to Apache
if ($request_filename ~* \.php.$) {
break; # prevents further rewrites
proxy_pass http://127.0.0.1:8080;
}
# If the requested file does not exist,
# forward the query to Apache
if (!-f $request_filename) {
break; # prevents further rewrites
proxy_pass http://127.0.0.1:8080;
}
# Your static files are served here
expires 30d;
}
}

There is no real performance difference between both solutions, as they will transfer the same amount of requests to the backend server. You should work on porting your Apache rewrite rules to Nginx if you are looking to get optimal performance.

 

출처 : http://wyseburn.tistory.com/archive/20110817

?

공부 게시판

공부에 도움되는 글을 올려주세요.

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 [공지] 공부 게시판 입니다. 처누 2003.08.18 927893
1146 건강 수두걸린 아이.. 엄마의 케어법 file JaeSoo 2013.03.22 6865
1145 경제 마진율 계산법 JaeSoo 2013.03.23 5067
1144 윈도우즈 지긋지긋한 NAT Service에서 해방되기~! file JaeSoo 2013.03.24 3755
1143 육아,교육 걸스카우트, 아람단, 컵스카우트, RCY, 해양소년단, 우주소년단 등 청소년 단체 알아보기 JaeSoo 2013.03.27 5821
1142 경제 [혜담대체-기획4] 카드별 최대피킹율, 최적사용금액 정리 - 13.03.24 file JaeSoo 2013.03.27 4151
1141 경제 [국민 굴비 카드] 반굴비 카드로 새로나온 온쇼핑 카드를 분석 file JaeSoo 2013.03.28 5945
1140 기타 각 나라별 커피믹스의 종류와 특징 file JaeSoo 2013.03.28 5246
1139 건강 <이비인후과> 만성외이도염 - 귀속이 항상 젖어있어서 가려워요 JaeSoo 2013.03.29 5835
1138 유닉스/리눅스 nobody 디렉토리 삭제가 안될 때 JaeSoo 2013.04.01 5176
1137 보안 RSA server certificate CommonName (CN) `www.mydomain.com' does NOT match server name!? JaeSoo 2013.04.04 4344
1136 보안 Win32 기반 서버에서 (Apache + Tomcat) WAS 의 SSL 적용 file JaeSoo 2013.04.04 3774
1135 소프트웨어 Windows Live Hotmail, POP3/SMTP 개방 JaeSoo 2013.04.06 3361
1134 웹 프로그래밍 현재 도메인 사이트 주소 확인(php) $_SERVER 함수정리 JaeSoo 2013.04.06 4932
1133 웹 프로그래밍 apache용 ewrite rule (htaccess)을 nginx rewrite rule로 변환 JaeSoo 2013.04.06 4797
1132 소프트웨어 MS Live.com 무료 도메인 메일 서비스 이용 file JaeSoo 2013.04.06 3101
1131 웹 프로그래밍 Apache rewrite 사용 방법 - 특정 URL이 입력되면 다른 URL로 연결 JaeSoo 2013.04.08 48518
» 소프트웨어 Nginx 와 Apache 동시사용 설정 (영문) JaeSoo 2013.04.08 3925
1129 소프트웨어 Nginx HttpRewriteModule JaeSoo 2013.04.08 3828
1128 소프트웨어 nginx 에서 htaccess 사용하기 file JaeSoo 2013.04.08 4489
1127 웹 프로그래밍 NGINX서버를 통한 다운로드 링크 형성하기(POGOPLUG SERIES 4용) file JaeSoo 2013.04.08 6915
Board Pagination Prev 1 ... 62 63 64 65 66 67 68 69 70 71 ... 124 Next
/ 124


즐겨찾기 (가족)

JAESOO's HOMEPAGE


YOUNGAE's HOMEPAGE


장여은 홈페이지


장여희 홈페이지


장여원 홈페이지


즐겨찾기 (업무)

알리카페 홀릭

숭실대 컴퓨터 통신연구실 (서창진)

말레이시아 KL Sentral 한국인 GuestHouse


즐겨찾기 (취미)

어드민아이디

유에코 사랑회

아스가르드 좋은사람/나쁜사람

JServer.kr

제이서버 메타블로그

재수 티스토리


즐겨찾기 (강의, 커뮤니티)

재수 강의 홈페이지


한소리


VTMODE.COM


숭실대 인공지능학과


숭실대 통신연구실


베너