LNMP、Tomca

构建Nginx服务器

 

使用源码包安装nginx软件包

[root@proxy ~]# yum -y install gcc pcre-devel openssl-devel        #安装依赖包
[root@proxy ~]# useradd -s /sbin/nologin nginx
[root@proxy ~]# tar  -xf   nginx-1.17.6.tar.gz
[root@proxy ~]# cd  nginx-1.17.6
[root@proxy nginx-1.17.6]# ./configure   \
--prefix=/usr/local/nginx   \                #指定安装路径
--user=nginx   \                            #指定用户
--group=nginx  \                            #指定组
--with-http_ssl_module                    #开启SSL加密功能
[root@proxy nginx-1.17.6]# make && make install     #编译并安装
  • make:是一个构建工具,它可以通过Makefile文件自动构建及编译软件。
  • gcc:GNU 编译器套件,可以编译多种编程语言的程序。
  • pcre-devel:PCRE是一个高效的、具有广泛应用的正则表达式库,pcre-devel是该库的开发文件,可用于构建使用 PCRE 库的应用程序。
  • openssl-devel:OpenSSL 是开源的安全套接字库,openssl-devel 提供了该库的开发文件,可用于在开发中编写安全的网络应用程序。
  • --with-http_ssl_module:提供SSL加密功能
  • --用户:指定账户
  • --组:指定组

nginx命令的用法

[root@proxy ~]# /usr/local/nginx/sbin/nginx                    #启动服务
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s stop            #关闭服务
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload        #重新加载配置文件
[root@proxy ~]# /usr/local/nginx/sbin/nginx -V                #查看软件信息

Netstat -anptu |格雷普·恩金克斯

-a显示所有端口的信息

-n以数字格式显示端口号

-t显示TCP连接的端口

-u显示UDP连接的端口

-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口

-p显示监听端口的服务名称是什么(也就是程序名称)

ss比netstat快的主要原因是,netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多

用户认证

通过Nginx实现Web页面的认证,需要修改Nginx配置文件,在配置文件中添加auth语句实现用户认证。最后使用htpasswd命令创建用户及密码即可

vim /usr/local/nginx/conf/nginx.conf

.. ..
server {
        listen       80;
        server_name  localhost;
        auth_basic "Input Password:";                        //认证提示符信息
        auth_basic_user_file  "/usr/local/nginx/pass";        //认证的密码文件
        location / {
            root   html;
            index  index.html index.htm;
        }
  }

生成密码文件,创建用户及密码

[root@proxy ~]# yum -y install  httpd-tools
[root@proxy ~]# htpasswd -c /usr/local/nginx/pass   tom        //创建密码文件
New password: 
Re-type new password: 
Adding password for user tom
[root@proxy ~]# htpasswd  /usr/local/nginx/pass   jerry      //追加用户,不使用-c选项
New password: 
Re-type new password: 
Adding password for user jerry
[root@proxy ~]# cat /usr/local/nginx/pass

基于xx的虚拟主机

虚拟主机一般可用分为:基于域名、基于IP和基于端口的虚拟主机

基于域名的虚拟主机
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;                                      //端口
        server_name  www.a.com;                                //域名
location / {
            root   html;                                    //指定网站根路径
            index  index.html index.htm;
       }    
}
… …
server {
        listen  80;                                        //端口
        server_name  www.b.com;                                //域名
location / { 
        root   www;                                 //指定网站根路径
        index  index.html index.htm;
    }
}

基于端口的虚拟主机

server {
        listen       9999;                        //端口
        server_name  web1.example.com;          //域名
        ......
}
    server {
        listen       8888;                         //端口
        server_name  web1.example.com;           //域名
      .......
}

基于IP的虚拟主机

server {
        listen       192.168.0.1:80;              //IP地址与端口
        server_name  web1.example.com;          //域名
  ... ...
}
    server {
        listen       192.168.0.2:80;             //IP地址与端口
        server_name  web1.example.com;
... ...
}

SSL虚拟主机(信任证书后可以访问)

源码安装Nginx时必须使用--with-http_ssl_module参数,启用加密模块,对于需要进行SSL加密处理的站点添加ssl相关指令(设置网站需要的私钥和证书)

openssl genrsa > cert.key  
openssl req -new -x509 -key cert.key > cert.pem

 第一个命令将使用genrsa选项生成一个 RSA 私钥证书,并将其输出到 cert.key 文件中。

第二个命令将使用req选项生成一个新的自签名证书请求,并使用刚刚生成的 RSA 密钥进行签名。该命令将生成一个 X.509 格式的证书,并将其输出到 cert.pem 文件中。

[root@proxy ~]# vim  /usr/local/nginx/conf/nginx.conf
… …    
server {
        listen       443 ssl;
        server_name            www.c.com;
        ssl_certificate      cert.pem;         #这里是证书文件
        ssl_certificate_key  cert.key;         #这里是私钥文件
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
  • ssl_session_cache指令启用SSL会话缓存,用于存储SSL会话信息以提高SSL连接响应时间,它使用共享内存区域存储SSL会话缓存,命名为“SSL”,大小为1MB;
  • ssl_session_timeout指令配置SSL会话缓存的过期时间,默认为5分钟,过期后SSL会话信息将被删除;
  • ssl_ciphers指令定义了服务器支持的SSL加密套件,此处指定服务器支持高安全性的加密套件,不支持无效加密套件和MD5算法;
  • ssl_prefer_server_ciphers指令表示服务器优先使用自己配置的加密套件,而非客户端提供的加密套件。

MariaDB、PHP环境

目前的网站一般都会有动态和静态数据,默认nginx仅可以处理静态数据,用户访问任何数据都是直接返回对应的文件,如果如果访问的是一个脚本的话,就会导致直接返回一个脚本给用户,而用户没有脚本解释器,也看不懂脚本源代码!

 mariadb、mariadb-server、mariadb-devel

php(开源脚本语言)、php-fpm(FastCGI进程管理器)、php-mysql(PHP 与 MySQL 数据库交互的功能)

FastCGI的内存消耗问题,一个PHP-FPM解释器将消耗约25M的内存/etc/php-fpm.d/www.conf

修改Nginx配置文件并启动服务

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
location / {
            root   html;
            index  index.php  index.html   index.htm;
#设置默认首页为index.php,当用户在浏览器地址栏中只写域名或IP,不说访问什么页面时,服务器会把默认首页index.php返回给用户
        }
 location  ~  \.php$  {
            root           html;
            fastcgi_pass   127.0.0.1:9000;    #将请求转发给本机9000端口,PHP解释器
            fastcgi_index  index.php;
            #fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi.conf;       #加载其他配置文件
        }

地址重写(rewrite)

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
rewrite  /a.html  /b.html;            
location / {
    root   html;
index  index.html index.htm;
}
}

访问a.html重定向到b.html(跳转地址栏redirect)

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
rewrite /a.html  /b.html  redirect;            
location / {
    root   html;
index  index.html index.htm;
}
}

rewrite ^/ http://www.tmooc.cn/        匹配到根路径("/")时,替换为http://www.tmooc.cn/

rewrite ^/(.*)$ http://www.tmooc.cn/$1;         该规则使用正则表达式,匹配所有请求,并在匹配到的URL前添加http://www.tmooc.cn/,然后将重写后的URL传递给下一个处理程序。与直接重定向不同,此规则不会更改浏览器中显示的URL,但会将请求发送到新的URL上

rewrite 旧地址 新地址 [选项];

last 不再读其他rewrite

break 不再读其他语句,结束请求

redirect 临时重定向

permanent 永久重定向

反向代理

反向代理:客户端->反向代理服务器->后端服务器->反向代理服务器->客户端(反向代理服务器充当一个正向代理:

客户端->正向代理服务器->目标服务器->正向代理服务器->客户端(正向代理服务器充当一个"代理者")中间层);

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
.. ..
#使用upstream定义后端服务器集群,集群名称任意(如webserver)
#使用server定义集群中的具体服务器和端口
upstream webserver {
                server 192.168.99.100:80;
                server 192.168.99.200:80;
        }
.. ..
server {
        listen        80;
        server_name  localhost;
            location / {
#通过proxy_pass将用户的请求转发给webserver集群
            proxy_pass http://webserver;
        }
}
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
.. ..
upstream webserver {
                server 192.168.99.100 weight=1 max_fails=1 fail_timeout=30;
                server 192.168.99.200 weight=2 max_fails=2 fail_timeout=30;
                server 192.168.2.101 down;
        }
#weight设置服务器权重值,默认值为1
#max_fails设置最大失败次数,测试服务器几次才确认服务器失败
#fail_timeout设置失败超时时间,单位为秒
#down标记服务器已关机,不参与集群调度
.. ..
server {
        listen        80;
        server_name  localhost;
            location / {
            proxy_pass http://webserver;
        }
}

自定义报错页面

在配置文件里面找到修改即可

apache调度算法

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
.. ..
upstream webserver {
#通过ip_hash设置调度规则为:相同客户端访问相同服务器
                 ip_hash;
                server 192.168.99.100 weight=1 max_fails=2 fail_timeout=10;
                server 192.168.99.200 weight=2 max_fails=2 fail_timeout=10;
        }
.. ..
server {
        listen        80;
        server_name  www.tarena.com;
            location / {
            proxy_pass http://webserver;
        }
}

定义状态页面

Active connections:当前活动的连接数量。

Accepts:已经接受客户端的连接总数量。

Handled:已经处理客户端的连接总数量。

(一般与accepts一致,除非服务器限制了连接数量)。

Requests:客户端发送的请求数量。

Reading:当前服务器正在读取客户端请求头的数量。

Writing:当前服务器正在写响应信息的数量。

Waiting:当前多少客户端在等待服务器的响应。

[root@proxy ~]# curl  http://192.168.88.5/status
Active connections: 1 
server accepts handled requests
 10 10 3 
Reading: 0 Writing: 1 Waiting: 0

 优化Nginx并发量

ab -n 2000 -c 2000 http://192.168.88.5/

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
worker_processes  2;                    //与CPU核心数量一致
events {
worker_connections 65535;        //每个worker最大并发连接数
}
.. ..
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload

优化Linux内核参数(最大文件数量)

[root@proxy ~]# ulimit -a                        //查看所有属性值
[root@proxy ~]# ulimit -Hn 100000                //设置硬限制(临时规则)
[root@proxy ~]# ulimit -Sn 100000                //设置软限制(临时规则)
[root@proxy ~]# vim /etc/security/limits.conf
    .. ..
*               soft    nofile            100000
*               hard    nofile            100000
#该配置文件分4列,分别如下:
#用户或组    硬限制或软限制    需要限制的项目   限制的值

增加数据包头部缓存大小

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
client_header_buffer_size    1k;        //默认请求包头信息的缓存    
large_client_header_buffers  4 4k;        //大请求包头部信息的缓存个数与容量
.. ..
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload

定义对静态页面的缓存时间

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires        30d;            //定义客户端缓存时间为30天
}
}

Session与cookie

Session:存储在服务器端,保存用户名、登陆状态等信息。

Cookies:由服务器下发给客户端,保存在客户端的一个文件里。

修改Nginx配置文件(修改默认首页与动静分离)

[root@web2 ~]# vim /usr/local/nginx/conf/nginx.conf
location / {
            root   html;
            index  index.php  index.html   index.htm;
        }
 location  ~  \.php$  {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
           # fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi.conf;
        }

Tomcat部署

[root@web1 ~]# yum -y install  java-1.8.0-openjdk                //安装JDK
[root@web1 ~]# yum -y install java-1.8.0-openjdk-headless        //安装JDK
[root@web1 ~]# java -version      

headles-安装JDK的头文件,这是在编译和安装其他软件时需要的

启动tomcat服务

/usr/local/tomcat/bin/startup.sh

虚拟主机

[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml
… …
<Host name="www.a.com" appBase="a" unpackWARS="true" autoDeploy="true">
</Host>
<Host name="www.b.com" appBase="b" unpackWARS="true" autoDeploy="true">
</Host>

使用Maven部署网站系统

安装maven工具,以及java环境

[root@web1 ~]# tar -xf apache-maven-3.6.3-bin.tar.gz
[root@web1 ~]# mv apache-maven-3.6.3 /usr/local/maven
[root@web1 ~]# yum -y install java-1.8.0-openjdk
[root@web1 ~]# yum -y install java-devel
[root@web1 ~]# /usr/local/maven/bin/mvn -v

修改镜像地址,在第158行下添加

[root@web1 ~]# vim /usr/local/maven/conf/settings.xml  
<mirror>
          <id>nexus-aliyun</id>
          <mirrorOf>*</mirrorOf>
          <name>Nexus aliyun</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public</url> 
</mirror>

 配置数据库并打包项目

[root@web1 ~]# yum install -y mariadb-server
[root@web1 ~]# systemctl start mariadb
[root@web1 ~]# cd CMS/
[root@web1 CMS]# cp src/main/resources/shishuocms.properties .
[root@web1 CMS]# mysql -uroot < sql/install.sql
[root@web1 CMS]# mysqladmin password

 打包项目

[root@web1 CMS]# /usr/local/maven/bin/mvn clean package

 上线测试

[root@web1 CMS]#cp target/shishuocms-2.0.1.war /usr/local/tomcat/webapps/ROOT.war
[root@web1 CMS]#/usr/local/tomcat/bin/startup.sh

制作nginx的RPM包(rpmbuild)

安装rpm-build软件包,编写SPEC配置文件,创建新的RPM软件包

[root@web1 ~]# yum -y install  rpm-build
[root@web1 ~]# rpmbuild -ba nginx.spec                //会报错,没有文件或目录
[root@web1 ~]# ls /root/rpmbuild                    //自动生成的目录结构
BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS

 将源码软件复制到SOURCES目录

 cp nginx-1.17.6.tar.gz /root/rpmbuild/SOURCES/

创建并修改SPEC配置文件

[root@web1 ~]# vim /root/rpmbuild/SPECS/nginx.spec 
Name:nginx                                        #源码包软件名称
Version:1.17.6                                    #源码包软件的版本号
Release:    10                                        #制作的RPM包版本号
Summary: Nginx is a web server software.            #RPM软件的概述    
License:GPL                                        #软件的协议
URL:    www.test.com                                    #网址
Source0:nginx-1.17.6.tar.gz                        #源码包文件的全称
#BuildRequires:                                    #制作RPM时的依赖关系
#Requires:                                        #安装RPM时的依赖关系
%description
nginx [engine x] is an HTTP and reverse proxy server.    #软件的详细描述
%post
useradd nginx                               #非必需操作:安装后脚本(创建账户)
%prep
%setup -q                                #自动解压源码包,并cd进入目录
%build
./configure
make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot}
%files
%doc
/usr/local/nginx/*                    #对哪些文件与目录打包
%changelog

使用配置文件创建RPM包\安装依赖软件包

[root@web1 ~]# yum -y install  gcc  pcre-devel openssl-devel
[root@web1 ~]# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec
[root@web1 ~]# ls /root/rpmbuild/RPMS/x86_64/nginx-1.17.6-10.x86_64.rpm
[root@web1 ~]# yum install /root/rpmbuild/RPMS/x86_64/nginx-1.17.6-10.x86_64.rpm 
[root@web1 ~]# rpm -qa |grep nginx
[root@web1 ~]# ls /usr/local/nginx/

编写systemd Unit文件

systemd的Unit文件哪些语句可以控制进程启动顺序

  • After
  • Before

cp /usr/lib/systemd/system/{crond.service,test.service}

vim /usr/lib/systemd/system/test.service
[Unit]
Description=my test script
After=time-sync.target
[Service]
ExecStart=/root/test.sh
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
[Install]
WantedBy=multi-user.target

使用systemd管理Nginx服务

[root@web1 ~]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The Nginx HTTP Server        #描述信息
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
#仅启动一个主进程的服务为simple,需要启动若干子进程的服务为forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT ${MAINPID}
[Install]
WantedBy=multi-user.target

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

small white poplar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值