我尝试搭建了一个nginx服务器

首先

为了研究目的,我搭建了一个nginx服务器。

我在Infracollege学习过。
https://infracollege.vamdemicsystem.black/linux/

将Nginx放置在可以从外部访问的位置,
当客户端发起访问时,它将被用作代理将请求转发到内部服务器。

这次的配置是,当客户端通过443端口访问nginx时,根据域名的不同,配置将请求转发到nagios服务器或nginx的httpd。

请参考以下的构成图以获取详细信息。

构成图

当客户端从浏览器访问”https://192.168.0.3/test1/”时,Nginx服务器将中转给Nagios服务器”http://192.168.0.2/nagios/”。

image.png

※桥接适配器是可以与外部通信的网络。
※内部网络是无法与外部通信的网络。

前提条件 tí

使用VirtualBox创建两个客户操作系统。
一个是nginx服务器,一个是nagios服务器,都是CentOS7。

请参考以下网站来构建Nagios服务器:https://qiita.com/gama1234/items/6869d23c5bc287403f78

请参考以下网站进行网络设置:
https://qiita.com/gama1234/items/d857fe5941ad5519f04c

建立nginx服务器的步骤

安装一个方便的工具

我安装了与网络相关的命令和命令补全等实用工具。

※ローカル端末のWSLからssh接続しました。
# yum -y install vim bash-completion net-tools bind-utils

停用SElinux

# vi /etc/selinux/config
※ファイルの中身です。

#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
#SELINUX=enforcing  ←SELINX有効をコメントアウトした。
SELINUX=disabled   ←SELINX無効を設定した。
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted                                                                                                             "/etc/selinux/config" line 15 of 15 --100%-- col 1

重新启动服务器

[root@localhost ~]# reboot
Connection to 192.168.0.3 closed by remote host.
Connection to 192.168.0.3 closed.

EPEL仓库注册

由于epel存储库中存在nginx软件包,因此需要预先安装epel存储库。

# yum -y install epel-release

以下のリポジトリをインストールしました。
Installing : epel-release-7-11.noarch

已安装了nginx。

# yum --enablerepo=epel -y install nginx

以下のリポジトリをインストールしました。
Installed:
  nginx.x86_64 1:1.20.1-9.el7
[root@localhost ~]#
Dependency Installed:
  centos-indexhtml.noarch 0:7-9.el7.centos   gperftools-libs.x86_64 0:2.6.1-1.el7   nginx-filesystem.noarch 1:1.20.1-9.el7
  openssl11-libs.x86_64 1:1.1.1k-3.el7

启动Nginx。

启动了NGINX

# systemctl start nginx

我确认了Nginx已经启动。

# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2022-07-23 15:30:50 JST; 7s ago
  Process: 1282 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 1280 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 1279 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 1284 (nginx)
   CGroup: /system.slice/nginx.service
           ├─1284 nginx: master process /usr/sbin/nginx
           └─1286 nginx: worker process

Jul 23 15:30:50 localhost.localdomain systemd[1]: Starting The nginx HTTP and reverse proxy server...
Jul 23 15:30:50 localhost.localdomain nginx[1280]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Jul 23 15:30:50 localhost.localdomain nginx[1280]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Jul 23 15:30:50 localhost.localdomain systemd[1]: Started The nginx HTTP and reverse proxy server.

在重新启动服务器时,将Nginx配置为自动启动。

# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

允许防火墙

允许使用Http、Https和端口9000。

# firewall-cmd --add-service=http --permanent
# firewall-cmd --permanent --add-port=9000/tcp --zone=public --permanent
# firewall-cmd --add-service=https --permanent

将防火墙设置生效

# firewall-cmd --reload

请确认防火墙已经允许 HTTP。

[root@nextcloud nginx]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3
  sources:
  services: dhcpv6-client http https ssh
  ports: 9000/tcp 53/udp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

确认从本地终端显示CentOS页面。

image.png

已创建SSL证书。

在nginx的配置文件中,由于没有设置中间证书的部分,如果服务器证书和中间证书是分开的文件,就需要将它们合并成一个文件。

# openssl genrsa 2048 > server.key && openssl req -new -key server.key -subj "/C=JP/ST=Tokyo" -out server.csr && openssl x509 -days 3650 -req -signkey server.key -in server.csr -out server.crt

# ls -ltr
-rw-r--r--  1 root root 1679 Jul 23 16:37 server.key
-rw-r--r--  1 root root  903 Jul 23 16:37 server.csr
-rw-r--r--  1 root root 1001 Jul 23 16:37 server.crt

将SSL证书文件移动到nginx文件夹中。

# pwd
/root
[root@localhost ~]# ls -tlr
合計 16
-rw-------. 1 root root 1432  8月  6 10:17 anaconda-ks.cfg
-rw-r--r--  1 root root 1675  8月  6 11:47 server.key
-rw-r--r--  1 root root  903  8月  6 11:47 server.csr
-rw-r--r--  1 root root 1001  8月  6 11:47 server.crt
# mv server.* /etc/nginx/
# ls -ltr /etc/nginx/server.*
-rw-r--r-- 1 root root 1679 Jul 23 16:37 /etc/nginx/server.key
-rw-r--r-- 1 root root  903 Jul 23 16:37 /etc/nginx/server.csr
-rw-r--r-- 1 root root 1001 Jul 23 16:37 /etc/nginx/server.c

我在nginx服务器上配置了httpd

安装了httpd

yum install httpd

打开httpd文件,并监听9000端口。

vi /etc/httpd/conf/httpd.conf
[root@nextcloud conf]# sdiff -s httpd.conf httpd.confbk
Listen 9000                                                   | Listen 80

重新启动了文法检查和httpd服务。

httpd -t
Syntax OK
systemctl restart httpd

更新了nginx的配置文件

由于SSL证书准备工作已经完成,将nginx的主配置文件“/etc/nginx/nginx.conf”修改为可以在443端口进行通信的设置。
将端口号从80更改为443。
配置了之前创建的SSL证书。

事先备份了设置文件。

# cp -p /etc/nginx/nginx.conf /etc/nginx/nginx.confbk20220723

修改了配置文件中的以下部分。

vi /etc/nginx/nginx.conf
※一部設定ファイルの記述を省略
# Settings fornabled server.
#
    server {
        listen 443 ssl http2;
        listen       [::]:443 ssl http2;← 443に変更した
        server_name  192.168.0.3; ←自身のIPを設定した
        root         /usr/share/nginx/html;

        ssl_certificate "/etc/nginx/server.crt";← SSL証明書を設定した
        ssl_certificate_key "/etc/nginx/server.key";← SSL証明書の秘密鍵を設定した
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
    ※nagiosサーバーを設定した
        location /test1/{
           proxy_pass http://10.0.0.2/nagios/;
           proxy_set_header host $host;
        }
    ※httpdサーバーを設定した 9000ポートで設定した
         location /test2/{
           proxy_pass http://192.168.0.3:9000/;
           proxy_set_header host $host;
        }
        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

}

获取nginx配置文件修改前后的差异。

左边是修改后的,右边是修改前的。

[root@nextcloud nginx]# sdiff -s nginx.conf nginx.confbk20220723
                                                              <
# Settings fornabled server.                                  <
#                                                             <
        listen 443 ssl http2;                                 |         listen       80;
        listen       [::]:443 ssl http2;                      |         listen       [::]:80;
        server_name  192.168.0.3;                             |         server_name  _;
        ssl_certificate "/etc/nginx/server.crt";              <
        ssl_certificate_key "/etc/nginx/server.key";          <
        ssl_session_cache shared:SSL:1m;                      <
        ssl_session_timeout  10m;                             <
        ssl_ciphers HIGH:!aNULL:!MD5;                         <
        ssl_prefer_server_ciphers on;                         <
                                                              <
                                                              |
        location /test1/{                                     <
           proxy_pass http://10.0.0.2/nagios/;             <
           proxy_set_header host $host;                       <
        }                                                     <
         location /test2/{                                    <
           proxy_pass http://192.168.0.3:9000/;               <
           proxy_set_header host $host;                       <
        }                                                     <
            location = /40x.html {                            |         location = /404.html {
            location = /50x.html {                            |         location = /50x.html {
}                                                             | # Settings for a TLS enabled server.
                                                              | #
                                                              > #    server {
                                                              > #        listen       443 ssl http2;
                                                              > #        listen       [::]:443 ssl http2;
                                                              > #        server_name  _;
                                                              > #        root         /usr/share/nginx/html;
                                                              > #
                                                              > #        ssl_certificate "/etc/pki/nginx/server.crt";
                                                              > #        ssl_certificate_key "/etc/pki/nginx/private/server.k
                                                              > #        ssl_session_cache shared:SSL:1m;
                                                              > #        ssl_session_timeout  10m;
                                                              > #        ssl_ciphers HIGH:!aNULL:!MD5;
                                                              > #        ssl_prefer_server_ciphers on;
                                                              > #
[root@nextcloud nginx]#
                                                              > #        include /etc/nginx/default.d/*.conf;
                                                              > #
                                                              > #        error_page 404 /404.html;
                                                              > #            location = /40x.html {
                                                              > #        }
                                                              > #
                                                              > #        error_page 500 502 503 504 /50x.html;
                                                              > #            location = /50x.html {
                                                              > #        }
                                                              > #    }
                                                              > }
[root@nextcloud nginx]#

进行了对nginx的语法检查

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

请重新启动nginx。

[root@localhost nginx]# systemctl restart nginx
[root@localhost nginx]#
[root@localhost nginx]#
[root@localhost nginx]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2022-07-23 17:14:42 JST; 7s ago
  Process: 1452 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 1450 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 1449 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 1454 (nginx)
   CGroup: /system.slice/nginx.service
           ├─1454 nginx: master process /usr/sbin/nginx
           └─1456 nginx: worker process

Jul 23 17:14:41 localhost.localdomain systemd[1]: Stopped The nginx HTTP and reverse proxy server.
Jul 23 17:14:41 localhost.localdomain systemd[1]: Starting The nginx HTTP and reverse proxy server...
Jul 23 17:14:42 localhost.localdomain nginx[1450]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Jul 23 17:14:42 localhost.localdomain nginx[1450]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Jul 23 17:14:42 localhost.localdomain systemd[1]: Started The nginx HTTP and reverse proxy server.

我确认了nginx服务器的端口状态。

我正在监听9000和443端口。

# netstat -an | grep LISTEN
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp6       0      0 :::9000                 :::*                    LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN

netstatコマンドでは、ポートの状態が分かりにくいため、nmapコマンドを実行した
# nmap 10.0.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2022-08-07 07:41 JST
Nmap scan report for 10.0.0.1
Host is up (0.0000060s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
443/tcp  open  https
9000/tcp open  cslistener

# netstat -an | grep EST
tcp        0      0 192.168.0.3:22          192.168.0.14:54170      ESTABLISHED

我确认了Nagios服务器的端口状态。

确认了80端口和22端口是开放的。
此外,通过nginx服务器验证了对nagios的ssh连接。

# netstat -an | grep LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp6       0      0 :::80                   :::*                    LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN                  :::*                    LISTEN

netstatコマンドでは、ポートの状態が分かりにくいため、nmapコマンドを実行した
# nmap 10.0.0.2
Starting Nmap 7.92 ( https://nmap.org ) at 2022-08-07 07:34 JST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for 10.0.0.2
Host is up (0.0000060s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

現在接続中のポートを確認した
# netstat -an | grep EST
tcp        0      0 10.0.0.2:22             10.0.0.1:55240          ESTABLISHED
image.png
image.png

查看访问日志

我登录到Nginx服务器,并查看了Nagios和Httpd的访问日志。

# less /var/log/nginx/access.log
192.168.0.14 - - [07/Aug/2022:07:04:49 +0900] "GET /test1/ HTTP/2.0" 401 381 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36" "-"
192.168.0.14 - nagiosadmin [07/Aug/2022:07:04:56 +0900] "GET /test1/ HTTP/2.0" 200 1055 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36" "-"

#httpdにアクセスした際のログです。
192.168.0.14 - - [07/Aug/2022:07:14:47 +0900] "GET /test2/noindex/css/open-sans.css HTTP/2.0" 200 5081 "https://192.168.0.3/test2/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Saf

我登录到 Nagios 服务器并查看了访问日志。

#less /etc/httpd/logs/access_log
10.0.0.1 - nagiosadmin [07/Aug/2022:07:44:55 +0900] "GET /nagios/main.php HTTP/1.0" 200 7401 "https://192.168.0.3/test1/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"

总结

我已经实际搭建了Nginx服务器,并大致了解了其工作原理。
由于Nginx服务器被广泛使用,如果能够了解其知识将会很有帮助。
希望您可以参考我的文章。

广告
将在 10 秒后关闭
bannerAds