CentOS 7.4 64位 搭建Jdk8+Tomcat8+Nginx+PHP环境

一、安装jdk1.8

1、安装前,一般会检查是否已经安装了jdk,检查方法:

rpm -qa |grep java

rpm -qa |grep jdk

rpm -qa |grep gcj

 如果有,可用下面的命令批量卸载所有带有Java的文件,下面这句命令的关键字是java,如果要换其他关键字,用其它关键字换掉java即可,如jdk。

rpm -qa | grep java | xargs rpm -e --nodeps

或者一个一个卸载(有几个卸载几个)

rpm -e --nodeps java-x.x.x-gcj-compat-x.x.x.x-xxjpp.xxx

rpm -e --nodeps java-x.x.x-openjdk-x.x.x.x-x.x.bxx.exx

  如果出现找不到openjdk source的话,还可以这样卸载

yum -y remove java java-x.x.x-gcj-compat-x.x.x.x-xxjpp.xxx

yum -y remove java java-x.x.x-openjdk-x.x.x.x-x.x.bxx.exx

2、通过yum安装

jdk的安装有很多方法,可以手 动下载解压安装,可以 用rpm安装,也可以用yum安装,我喜欢用yum,因为什么也不用操作,就像在windows点击安装文件安装一样,有简单的为什么要给自己找麻烦呢?

安装命令:

yum install java-1.8.0-openjdk.x86_64

 亦或安装的内容更全些可用

yum -y install java-1.8.0-openjdk*

验证是否安装成功

java -version

通过yum默认安装的路径为/usr/lib/jvm/java-版本号(如/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64)
 

二、安装Tomcat8

通过yum list tomcat*,可以看出,yum列表上的tomcat版本是7,所以要安装tomcat8,就不能用yum安装了,只能手动下载安装包了。 

1、从https://tomcat.apache.org/download-80.cgi下载tomcat8安装文件apache-tomcat-8.5.39.tar.gz,也可以在命令行直接用wget来获取,我是直接下载,然后通过wincp扔到服务器的/home文件夹下了。

2、进入下载目录,解压文件到之前创建的/opt/tomcat下。

tar -zxvf apache-tomcat-8.5.39.tar.gz -C /opt/tomcat --strip-components=1

3、设置tomcat8为系统服务.

在/usr/lib/systemd/system/目录或/etc/systemd/system目录下,创建tomcat.service文件,内容如下:

[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/lib/jvm/jre
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/opt/tomcat/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID  
ExecStop=/bin/kill -s QUIT $MAINPID

#User=tomcat
#Group=tomcat

[Install]
WantedBy=multi-user.target

其中User和Group两行,如果为Tomcat设置专用用户,并将Tomcat的启动权限设置在该用户上,可启用这两行。在本次设置中,直接用root启动Tomcat,所以不需要这两行,因而加以注释。

4、启动Tomcat。

service tomcat start

 或

systemctl start tomcat

5、从浏览器访问http://IP:8080,出现Tomcat欢迎页即为成功。有 时候出来不了,就看看是不是端口问题。一是本机的防火墙,firewall或iptables;或者用的云服务器的话,里面的安全设置中也会有端口的设置。

6、补充:修改tomcat日志存放路径。原日志文件路径:/var/log/tomcat

1)编辑catalina.sh文件,将catalina.out文件路径修改为自定义路径:

if [ -z "$CATALINA_OUT" ] ; then
  CATALINA_OUT=/data/wwwlogs/tomcat/logs/catalina.out
fi

2)打开server.xml,将org.apache.catalina.valves.AccessLogValve日志路径改为自定义路径如下:

3)打tomcat安装目录下的conf目录,修改其中的logging.properties文件,将directory改为自己设定的目录。

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = /data/wwwlogs/tomcat/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8

2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = /data/wwwlogs/tomcat/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
2localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-8

3manager.org.apache.juli.AsyncFileHandler.level = FINE
3manager.org.apache.juli.AsyncFileHandler.directory = /data/wwwlogs/tomcat/logs
3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
3manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
4host-manager.org.apache.juli.AsyncFileHandler.directory = /data/wwwlogs/tomcat/logs
4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
4host-manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = UTF-8

4)使用CentOs7自带的logrotate分割catalina.out日志。在/etc/logrotate.d文件夹下,新建tomcat文件,内容如下:

/data/wwwlogs/tomcat/logs/catalina.out {
        daily
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        dateext
        create 640 root root
        sharedscripts
        postrotate
                if [ -f /opt/tomcat/temp/tomcat.pid ]; then
                        kill -USR1 `cat /opt/tomcat/temp/tomcat.pid`
                fi
        endscript
}

 

三、安装nginx

1、安装Nginx源。

使用yum list nginx,可看到系统上的nginx版本是1.12.0的,我们想安装最新版的,就可以先执行下面这个命令。

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

安装该rpm后,我们就能在/etc/yum.repos.d/ 目录中看到一个名为nginx.repo 的文件。

Tomcat怎么更新库,谁能告诉我一下?

2、安装Nginx。

yum install -y nginx

3、检验安装,输入nginx -v,看到版本号,安装成功。

nginx -v

4、启动nginx。

service nginx start

浏览器中输入http://IP看到nginx的欢迎界面,表示启动成功。端口问题参照tomcat端口的解决方法。

5、补充:修改nginx日志存放路径。原日志文件路径:/var/log/nginx

1)修改/etc/nginx/nginx.conf文件中error_log内容和access_log内容。如nginx.conf中包含其它配置文件,如 “include /etc/nginx/conf.d/*.conf;”,在这些配置文件中的日志路径一并修改。 

user  nginx;
worker_processes  auto;

error_log  /data/wwwlogs/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/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  /data/wwwlogs/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
    
}

2)用logrotate切割nginx日志,在/etc/logrotate.d下,已经存在了nginx文件,只需要将里面日志文件路径根据自己的路径修改一下即可。 

/data/wwwlogs/nginx/*.log {
        daily
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        dateext
        create 640 root root
        sharedscripts
        postrotate
                if [ -f /var/run/nginx.pid ]; then
                        kill -USR1 `cat /var/run/nginx.pid`
                fi
        endscript
}

四、安装PHP。

1、更新RPM包。

用yum list php列出可以看到,php的版本是5.4的,如果要装5.6或7,需要先更新下面两个RPM。

rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm 
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm 

2、安装PHP5.6。

yum install php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 php56w-mcrypt.x86_64 php56w-mysql.x86_64 php56w-pdo.x86_64

3、安装php-fpm,并设置为开机启动。 

yum install php56w-fpm
systemctl start php-fpm.service
systemctl enable php-fpm.service

补充:php-fpm日志存放文件路径修改。原路径为:/var/log/php-fpm

1)修改/etc/php-fpm.d/www.conf,将相关日志路径修改自定义路径下。 

slowlog = /data/wwwlogs/php-fpm/www-slow.log
php_admin_value[error_log] = /data/wwwlogs/php-fpm/www-error.log

2)修改 /etc/logrotate.d下php-fpm文件,将日志路径改为自定义路径。

/data/wwwlogs/php-fpm/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
	/bin/kill -SIGUSR1 `cat /var/run/php-fpm/php-fpm.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

4、修改nginx配置文件。

按照以上方式安装的nginx,配置文件在/etc/nginx下nginx.conf,如下:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
    
}

各种优化配置,不是这篇文章的重点,在此不讨论。可看到此配置文件包含conf.d下的conf文件,按照上述安装方式安装后,conf.d目录下有一个默认的default.conf文件,如下:

server {
    listen       80;
    server_name  localhost; 

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;   

    location / {
	root   /usr/share/nginx/html;
        index  index.html index.htm index.php;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root   /usr/share/nginx/html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

注意原文件与上面文件的不同:

1)此处去掉了PHP代理方式代码块前的注释,并将root由原来的html改为了/usr/share/nginx/html,也就是自己nginx设定的根目录;同时将fastcgi_param  SCRIPT_FILENAME改为了 $document_root$fastcgi_script_name,改后如下:

    location ~ \.php$ {
        root   /usr/share/nginx/html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

5、测试php。

写一个php的测试文件,放到nginx的目录下,默认目录为:/usr/share/nginx/html,然后访问,如果能顺利解析,则为成功。

6、可能出现的问题。

在此次安装过程中,刚形始一直无法访问php,浏览器显示页面不存在,nginx日志报如下错误:

[error] 19810#19810: *18 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 123.234.432.321, server: localhost, request: "GET /abc.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "12.34.56.78"

从网上查,大概如下几类:

1)大部是是说将fastcgi_param  SCRIPT_FILENAME改为$document_root$fastcgi_script_name,改动后,错误依旧,但这个确实要改;

2)目录权限问题, 大概是说放置在nginx的html目录下的子目录或文件的访问权限设置过高吧,我的不是这个问题;

3)还是权限问题,各种说法,确实太多,无法详细说明。说明一点的是,我安装nginx和php-fpm均是用root用户,运行时,nginx用的用户是nginx,php-fpm用的是apache,网上安全建议里说要改成nobody的,因为我这里不重点讨论安全问题,所以在此略过,相关的配置方法可从网上百度后进行配置。我这里说明的是,我不是这个问题。

4)好容易找到一个不一样的说法的说是将root位置由location中提到server中,如图:

server {
    listen       80;
    server_name  localhost;

    access_log  /var/log/nginx/log/host.access.log  main;
    root   /usr/share/nginx/html;  #原本这个设置是在下面localtion里面的

    location / {
        index  index.php index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~* \.php$ {
        fastcgi_index   index.php;
        fastcgi_pass    127.0.0.1:9000;
        include         fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;  #网上很多人说这个地方有的没配置,但是我是按照php官方的来配置的,就有这个
        fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
    }


}
--------------------- 
作者:SHUIPING_YANG 
来源:CSDN 
原文:https://blog.csdn.net/zhezhebie/article/details/73497150 
版权声明:本文为博主原创文章,转载请附上博文链接!

我试了,依然没解决。

5)最后我发现,在default.conf文件中,对php解析那一段 ,也就是 location ~ \.php$代码块中,原来定义的root是html,我不知道为什么它其它地方定义的都是 /usr/share/nginx/html,单单这里写成了html,而且还单独写了,把这里的html改成/usr/share/nginx/html后重启nginx,发现成功了。但这样一个问题,居然折磨了我整整两天。

五、关于mysql

因为我们数据库服务器用的是阿里的RDS,一般我也不在该服务器上操作mysql数据库,所以本机不需要安装mysql。

关于mysql的安装,可以网上搜索,因为本机没有安装,不能详述安装过程及可能的问题,所以在此不再记录。

其中注意一点,在项目动时,如果出现以下警告:

WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. 

原因是当前版本的MySQL要求使用SSL,解决方法是在数据库连接字串里加上useSSL=true即可。

 六、关于Tomcat8.5.40不解析样式的问题。

在本次项目部署后,发现前台访问后,样式不加载,在谷歌浏览器F12出现如下警告信息:

Resource interpreted as stylesheet but transferred with MIME type text/html 

查看资源类型确实发现css 文件的响应类型变成了text/html,而不是text/css,而程序是没有错的,因为在原来的tomcat7和tomcat8.0中都没有问题。

用IE访问可以,但360极速模式和谷歌济浏览器不行。

百度了很多文章,有说是自定义过滤器的问题,有说是服务器配置的问题,有说删除掉(这个确实可行,我试了,确实可以,但感觉不是解决之道,所以未采用)。这篇文章,跟我的情况很相似,但它的方案并未解决我的问题:https://blog.csdn.net/sky_cui/article/details/86703706 

各种方案我试了均未最终解决我的问题。 

最终我是将服务器上的tomcat8.5.40版本换成了8.0版本, 来暂时解决该问题。

补充一句,我在本机上测试,tomcat8.5.40和9均有这个问题,具体原因仍不详,怀疑是服务器解析协议的问题。

如果有已经找到问题根源所在的,请留言,不胜感激。

你可能感兴趣的:(nginx,tomcat,linux,JAVA,环境配置)