我尝试搭建了一个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/”。
※桥接适配器是可以与外部通信的网络。
※内部网络是无法与外部通信的网络。
前提条件 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页面。
已创建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
查看访问日志
我登录到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服务器被广泛使用,如果能够了解其知识将会很有帮助。
希望您可以参考我的文章。