nginx+apacheポート転送

5235 ワード

最近、会社はコンテンツ管理システムを構築する必要があります.使用するフレームワークは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ルートパスにアクセスできることに気づきます.もし私たちのプロジェクトを問い返すと、私たちはプロジェクトパス(例えばdededecms)に参加します.では、私たちはこのように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;
    
}


上のapp 1_serverは私たちのrailsプロジェクト、cms_serverは私たちが今しなければならないcmsの構成です.ここでは、サーバのアドレスとポート番号を指定します.それから、私が2つのプロジェクトのプロファイルをincludeしたのが見えます.これはプロジェクト管理を容易にするために、serversディレクトリを新規作成しました.すべてのプロジェクトの構成情報がこの中に入っています.ここでapp 1.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