1. 程式人生 > >Linux下配置Nginx+Apache+PHP+Tomcat+Java同時執行

Linux下配置Nginx+Apache+PHP+Tomcat+Java同時執行

公司業務需要,要在Linux上同時執行一個Java專案和一個php專案。伺服器外網IP繫結的一個頂級域名指向Java專案,此頂級域名解析出的一個二級域名指向php專案。設定Apache和Tomcat監聽不同埠。通過Nginx的請求轉發,把使用者請求(訪問連結)轉發到對應的埠去處理即可實現此需求。

反向代理:所謂的反向代理就是來自網際網路的請求不直接訪問web伺服器,而是先訪問反向代理伺服器(我們這裡用Nginx),之後Nginx伺服器將請求轉發到(內網環境)伺服器。

一、準備工作

版本:Linux(Ubuntu 16.4)

1、軟體安裝(參考我的這幾篇部落格)

2、重要的配置檔案位置

Tomcat的server.xml在:Tomcat安裝目錄/conf下

Apache的apache2.conf:在/etc/apache2下,Apache還有一些很重要的配置檔案都在/etc/apache2下的子目錄裡,後面會用到

Nginx的nginx.conf:在/usr/local/nginx/conf下,後面還會新建一些配置檔案

二、配置

伺服器上原來正在執行的是Java專案,訪問www.xxxx.com(我這裡的頂級域名我就用xxxx代替),就會跳轉到Tomcat下webapps面的指定的專案。我這裡是Java專案正在執行,需要新增php專案,我就不寫怎麼讓Java專案運行了,就寫如何新增php專案。有些同學的情況可能是php正在執行,需要新增Java專案,有些同學可能是兩個都還沒執行起來。總之,你先讓一個專案先跑起來,再新增另一個,都是一樣的道理。

由於此次配置要修改的配置檔案很多,我就把它們都下載下來了,在編輯器上編輯的,這樣好比較,檢視。沒有用vim編輯。

關於埠:不管什麼服務,都不能佔用同一個埠,因為安裝服務之後就會預設啟動,此時它們的預設埠幾乎都是80。譬如伺服器執行著Tomcat(監聽的80埠),此時又在安裝Nginx,安裝完就會自動啟動Nginx服務,啟動就會報錯:80埠被佔用。此時只要去修改配置檔案的監聽埠就好了。

關於預設的80埠:瀏覽網頁服務預設的埠號都是80,因此只需輸入網址即可,不用輸入“:80”了。

1、修改Tomcat的server.xml

我的檔案位置:/usr/tomcat/apache-tomcat-8.5.11/conf/server.xml

找到你原來的監聽埠,預設8080。我這裡把它改成了8099,讓Tomcat監聽8099埠。

這裡寫圖片描述

這裡的443是配置的https,有些同學可能沒有配,不用管。

2、修改Apache的配置檔案

先把php專案上傳到”/var/www/html”目錄下,這是apache2預設的專案根目錄。

建立兩個日誌檔案:/etc/apache2/logs/access.log和/etc/apache2/logs/error.log

檔案目錄:

這裡寫圖片描述

修改/etc/apache2/ports.conf,把”Listen 80”修改為”Listen 8088 “。讓Apache監聽8088埠。可以看到在apache2.conf裡面引入了ports.conf

這裡寫圖片描述

在apache2.conf底部找到:

這裡寫圖片描述

前面加上”#”,把這句註釋掉。為了直接在apache2.conf中配置虛擬主機,看起來直觀點。就不去sites-enabled/*.conf中配置了。

在apache2.conf中找到‘ #ServerRoot “/etc/apache2”‘,在下面新增如下配置資訊:

這裡寫圖片描述

DocumentRoot 這一行就是你的專案地址,我這裡的專案名叫MetInfo。
ServerName 就是我的二級域名(我這裡配置這個二級域名指向這個php專案)。

修改/etc/apache2/mods-enabled/dir.conf檔案,把index.php放到最前面來:

這裡寫圖片描述

3、修改Nginx的配置檔案

我在/usr/local/nginx目錄下新建了一個資料夾dnconf來放我的自定義配置檔案:

這裡寫圖片描述

編輯/usr/local/nginx/conf/nginx.conf檔案,我的整個nginx.conf檔案內容如下:

user  Michael;
worker_processes  1;
error_log  logs/error.log;
#error_log  logs/error.log  notice;#error_log  logs/error.log  info;
pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status$body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
 include /usr/local/nginx/dnconf/*.conf;//引入自定義配置檔案
}

在/usr/local/nginx/logs目錄下新建兩個訪問地址專用的日誌檔案:content.xxxx.com.access.log,xxxx.com.access.log

這裡寫圖片描述

在dnconf目錄下新建兩個配置檔案:javaset.conf和phpset.conf

javaset.conf:

server {
        listen       80;
        server_name  www.xxxx.com  localhost;
        access_log  logs/xxxx.com.access.log;
       location /
        {
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_set_header Host  $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:8099;
        }
}

phpset.conf

server {
        listen       80;
        server_name  content.xxxx.com;
        access_log  logs/content.xxxx.com.access.log;
       location /
        {
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_set_header Host  $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:8088;
        }
}

Nginx只監聽80埠,不同的域名訪問進來控制跳轉到訪問不同的埠,就到不同的專案中去了。

Ngixn文件:英文文件中文文件

4、啟動服務

開啟Tomcat和Apache服務,最後啟動Nginx服務。

測試訪問ok,日誌檔案都有記錄。

有疑問的可以交流 QQ:842404548。

第一次感受到Nginx的強大之處!

這裡寫圖片描述