web-dev-qa-db-ja.com

Ubuntu 18.04で複数のサイトNginxを実行する

私はNginxの初心者です(PHP 7.2を使用しています)。別々のフォルダーを使用して複数のサイトにアクセスする方法がわかりません。
したがって、デフォルトのフォルダとして/home/user/php;を設定します。
そこには、site1, site2, site3 etcという名前のフォルダーがいくつかあります。
ターミナルを使用して、コマンドphp -S localhost:8000を使用して、デフォルトフォルダーでサーバーを起動します。
これは問題です。ブラウザでlocalhost:8000/site1/と入力すると、index.phpファイルの内容が表示されますが、その場所にある他のファイルが乱れます。例えば写真。 /php/site1/images/にあるpngファイルのフォルダーがあります。しかし、ターミナルログによると、/php/images/(存在しない)と/php/site1/images/ではなくこれらのpngファイルを検索しているため、ブラウザのページには表示されません。すべては、サイトのあるサブフォルダーではなく、デフォルトのサーバーフォルダーで検索されます。構成ファイルを変更するにはどうすればよいですか、別のフォルダーを読み取るにはどうすればよいですか?

Nginxの設定(/etc/nginx/sites/available/default)は次のとおりです。 https://Pastebin.com/pZHgPkCZ

1
Victoria

手順は次のとおりです(前提条件:-Nginxがインストールされている):

  1. /var/www/folderで両方またはすべてのサイトのサーバーブロックを作成します。

    Sudo mkdir -p /var/www/mytest1.com/public_html
    Sudo mkdir -p /var/www/mytest2.com/public_html
    
  2. 許可を変更して、通常のユーザーに読み取りおよび書き込みアクセスを許可します。

    Sudo chown -R $(whoami):$(whoami) /var/www/mytest1.com/public_html
    Sudo chown -R $(whoami):$(whoami) /var/www/mytest2.com/public_html
    
  3. ページを正しく提供できるように権限を設定します。

    Sudo chmod -R 755 /var/www
    
  4. テストサイト用に2つのページを作成します。

    Sudo echo "Welcome to mytest1.com!" > /var/www/mytest1.com/public_html/index.html
    Sudo echo "Welcome to mytest2.com!" > /var/www/mytest2.com/public_html/index.html
    
  5. サーバーブロックの作成:

    1. デフォルトのnginxホームページのデフォルトファイルをコピーします:

      Sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/mytest1.com
      
    2. コピーしたファイルを編集します。

      Sudo nano /etc/nginx/sites-available/mytest1.com
      
      • 下にスクロールして、このroot /var/www/html;root /var/www/mytest1.com/public_html;に変更します
      • これをserver_name _;からserver_name mytest1.com www.mytest1.com;に変更します
      • このindex index.html index.htm index.nginx-debian.html;をこのindex index.php index.html index.htm index.nginx-debian.html;に変更します
  6. fastcgi_pass socketパスの値が正しいことを確認します。

    • 実行:ls /var/run/php/

      • 結果:

        php7.2-fpm.pid php7.2-fpm.sock
        
      • メモが正しい方向を指している場合は、サーバーブロックファイルにphp7.2-fpm.socketの場所を追加し、ファイルの場所の部分がそのように見えることを確認し、一部の領域でこれを実現するには#を削除します。

        ...
            location ~ \.php$ {
                                   include snippets/fastcgi-php.conf;
                  #
                  #                 # With php-fpm (or other unix sockets):
                                    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
                  #                 # With php-cgi (or other tcp sockets):
                  #                 fastcgi_pass 127.0.0.1:9000;
                   }
         ...
        
    • エディターを閉じ、Sudo nginx -tを使用してnginx設定をテストします。エラーがあれば、手順を逆方向に繰り返します。有効な構文は次のとおりです。

       nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
       nginx: configuration file /etc/nginx/nginx.conf test is successful
      
  7. サイト1でstep 5 and 6を使用していたmytest2.comを使用して、他のサイトでmytest1.comを繰り返します。さらに、2番目のサイトでは、/etc/nginx/sites-available/mytest2.comファイルの編集時に以下を実行します。

    listen 80 default_server;
    listen [::]:80 default_server;
    

    これに:

    listen 80;
    listen [::]:80;
    
    • 理由:

      Default_server指定を持つことができるサーバーブロックは1つだけです。これは、要求されたserver_nameが使用可能なサーバーブロックのいずれとも一致しない場合にどのブロックに戻るかをNginxに伝えます。

  8. シンボリックリンクを作成します。

    Sudo ln -s /etc/nginx/sites-available/mytest1.com /etc/nginx/sites-enabled/
    Sudo ln -s /etc/nginx/sites-available/mytest2.com /etc/nginx/sites-enabled/
    
  9. デフォルトのサーバーブロックのシンボリックリンクを削除します。

    Sudo rm /etc/nginx/sites-enabled/default
    
  10. Nginxを再起動します。

    Sudo service nginx restart
    

11:オプション:ホストファイルの編集:

 127.0.0.1 mytest1.com
 127.0.0.1 mytest2.com

ブラウザに移動してlocalhostと入力するか、mysite1.comファイルにエントリを作成した場合は/etc/hostsと入力します。また、nginxは80ではなく、ポート8080でリッスンすることに注意してください。 PHPサーバーではありません

資源:

https://devanswers.co/installing-nginx-ubuntu-18-04-multiple-domains/

https://devanswers.co/installing-php-nginx-ubuntu-18-04/

2
George Udosen