Skip to content

Instantly share code, notes, and snippets.

@yukpiz
Last active September 11, 2015 07:37
Show Gist options
  • Save yukpiz/bfd36ed99bd5dff0011f to your computer and use it in GitHub Desktop.
Save yukpiz/bfd36ed99bd5dff0011f to your computer and use it in GitHub Desktop.

Nginxでリバースプロキシ

やりたいこと

  • オブジェクトストレージへのアクセスをNginxを経由させる
  • Apacheで公開してる既存サイトもついでにNginx経由させる

ApacheとNginxはデフォルトで80で動作するので、
Nginxを動作させるために既存サイトもNginxを経由させる必要がある。

Nginxのインストール

$ sudo apt-get install nginx

Apacheのデフォルトポートを変更

$ sudo vim /etc/apache2/ports.conf
- Listen 80
+ Listen 8080

$ sudo vim /etc/apache2/sites-available/*****.conf
- <VirtualHost *:80>
+ <VirtualHost *:8080>

$ sudo /etc/init.d/apache2 restart

sites-available/*<VirtualHost *:80>になっているところも変更が必要。
これでApacheで動いてる既存サイトは全て8080に変更される。

Nginxでリバースプロキシの設定

$ sudo vim /etc/nginx/proxy_params
+ proxy_redirect off;
+ proxy_set_header Host $host;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Host $host;
+ proxy_set_header X-Forwarded-Server $host;
+ proxy_set_header X-Real-IP $remote_addr;

$ sudo vim /etc/nginx/reverse_proxy
+ server {
+   listen 80;
+   server_name xxxxxx.xxx;
+   location / {
+     proxy_pass http://xxxxxx.xxx:8080;
+   }
+ }

# サブドメインとかで複数サイトあるならserverを増やす
+ server {
+   listen 80;
+   server_name xxxx.xxxxxx.xxx;
+   location / {
+     proxy_pass http://xxxx.xxxxxx.xxx:8080;
+   }
+ }

$ sudo /etc/init.d/nginx restart

ConohaのオブジェクトストレージにWeb公開用のコンテナを作成

コンテナのメタデータに名前がX-Container-Readのヘッダを追加して、
値を.r:*にするだけでOK。Cyberduckでやる。

  1. コンテナを作成する
  2. コンテナを選択して、情報を見る
  3. Metadataを選択して、下部の歯車アイコンからCustom Headerを選択
  4. NameとValueをそれぞれ上記の通りに設定
  5. コンテナを右クリックしてCopyURLしてURLを控える

NginxでConohaのオブジェクトストレージにリバースプロキシする

$ sudo vim /etc/nginx/reverse_proxy
+ server {
+   listen 80;
+   server_name xxxx.xxxxxx.xxx; #今回は共有用でサブドメイン設定した
+   location /[作成したコンテナ名] {
+     proxy_pass [コンテナのURL];
+   }
+ }

$ sudo /etc/init.d/nginx restart

これで設定したサブドメイン/コンテナ名/ファイル名で共有ファイルにアクセスできるはず。

おまけ

Basic認証つけてみる

$ sudo apt-get install apache2-utils
$ sudo htpasswd -c /etc/nginx/.htpasswd [ユーザー名]
New password: ********
Re-type new password: ********

$ sudo vim /etc/nginx/reverse_proxy
server {
  listen 80;
  server_name xxxx.xxxxxx.xxx; #今回は共有用でサブドメイン設定した
  location /[作成したコンテナ名] {
    proxy_pass [コンテナのURL];
+   auth_basic "[Basic認証ダイアログに表示するコメント(マルチバイト文字化けます)]";
+   auth_basic_user_file /etc/nginx/.htpasswd;
  }
}

$ sudo /etc/init.d/nginx restart

外部からのApacheへのアクセスの拒否設定を忘れた・・・

あとでやる( ・ิϖ・ิ)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment