在Azure平台上使用Ubuntu和Apache2,配置PHP和虚拟主机。请注意,这是一种可能的中文翻译方式,不同的表达方法也是可以的

「从Azure上的Ubuntu / Apache2搭建Web服务器直至发布」

在您设定的Web服务器上进行以下配置

    • PHP

 

    • UserDir

 

    VirtualHost

环境

    • サーバ Microsoft Azure 上の Ubuntu 22.04

 

    ローカルPC Ubuntu 22.04

本次使用Azure上的虚拟服务器作为服务器,但并未特别使用Azure的功能。

安装PHP


azureuser@test-azure-gen:~$ sudo apt install php

我要制作测试脚本。(Wǒ .)

$ sudo vim /var/www/html/phpinfo.php

这个东西只有这个。

<?php
phpinfo();
?>

在浏览器中确认后,可以看到如先前文章所述的文档根目录文件列表。

image.png

打开phpinfo.php文件,会显示相关信息。

image.png

似乎已经安装了php8.1。

使用UserDir功能

这是一个允许用户公开本地 public_html 文件夹的功能。

作为本地用户,我将添加一个示例。

$ sudo adduser example
Adding user `example' ...
Adding new group `example' (1001) ...
Adding new user `example' (1001) with group `example' ...
Creating home directory `/home/example' ...
Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for example
Enter the new value, or press ENTER for the default
	Full Name []: 
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Is the information correct? [Y/n] Y

我成为用户。

azureuser@test-azure-gen:~$  su - example
Password: 
example@test-azure-gen:~$ pwd
/home/example

创建一个public_html文件夹,并将html文件放置其中。


example@test-azure-gen:~$ mkdir public_html
example@test-azure-gen:~$ cd public_html
example@test-azure-gen:~/public_html$ cp /var/www/html/hello.html example.html
example@test-azure-gen:~/public_html$ vim example.html

我已经将其内容更改为如下。

<!DOCTYPE HTML>
<HTML><HEAD><META CHARSET=UTF-8><TITLE></TITLE></HEAD>
<BODY>
<H1>example Hello</H1>
</BODY>
</HTML>

http://<服务器IP地址>/~示例

我会在浏览器中尝试打开。

image.png

目前,显示 “未找到”。要将其设置为可见,按照以下方式进行设置。

例子是,退出当前用户并切换到azure-users用户。

example@test-azure-gen:/etc/apache2/mods-enabled$ exit

Apache 是一种功能丰富的服务器,各种功能通过模块提供,可以对每个模块进行启用/禁用。

用户可以使用UserDir模块来公开其本地public_html文件夹,并需要将其设置为enable。

我們將檢查目前在apache2中提供的模組清單。

azureuser@test-azure-gen:~$ cd /etc/apache2
azureuser@test-azure-gen:/etc/apache2$ ls
apache2.conf  conf-available  conf-enabled  envvars  magic  mods-available  mods-enabled  ports.conf  sites-available  sites-enabled
azureuser@test-azure-gen:/etc/apache2$ ls mods-available/
access_compat.load    authz_user.load     dir.load                  log_debug.load       proxy_connect.load   session_crypto.load
actions.conf          autoindex.conf      dump_io.load              log_forensic.load    proxy_express.load   session_dbd.load
actions.load          autoindex.load      echo.load                 lua.load             proxy_fcgi.load      setenvif.conf
alias.conf            brotli.load         env.load                  macro.load           proxy_fdpass.load    setenvif.load
alias.load            buffer.load         expires.load              md.load              proxy_ftp.conf       slotmem_plain.load
allowmethods.load     cache.load          ext_filter.load           mime.conf            proxy_ftp.load       slotmem_shm.load
asis.load             cache_disk.conf     file_cache.load           mime.load            proxy_hcheck.load    socache_dbm.load
auth_basic.load       cache_disk.load     filter.load               mime_magic.conf      proxy_html.conf      socache_memcache.load
auth_digest.load      cache_socache.load  headers.load              mime_magic.load      proxy_html.load      socache_redis.load
auth_form.load        cern_meta.load      heartbeat.load            mpm_event.conf       proxy_http.load      socache_shmcb.load
authn_anon.load       cgi.load            heartmonitor.load         mpm_event.load       proxy_http2.load     speling.load
authn_core.load       cgid.conf           http2.conf                mpm_prefork.conf     proxy_scgi.load      ssl.conf
authn_dbd.load        cgid.load           http2.load                mpm_prefork.load     proxy_uwsgi.load     ssl.load
authn_dbm.load        charset_lite.load   ident.load                mpm_worker.conf      proxy_wstunnel.load  status.conf
authn_file.load       data.load           imagemap.load             mpm_worker.load      ratelimit.load       status.load
authn_socache.load    dav.load            include.load              negotiation.conf     reflector.load       substitute.load
authnz_fcgi.load      dav_fs.conf         info.conf                 negotiation.load     remoteip.load        suexec.load
authnz_ldap.load      dav_fs.load         info.load                 php8.1.conf          reqtimeout.conf      unique_id.load
authz_core.load       dav_lock.load       lbmethod_bybusyness.load  php8.1.load          reqtimeout.load      userdir.conf
authz_dbd.load        dbd.load            lbmethod_byrequests.load  proxy.conf           request.load         userdir.load
authz_dbm.load        deflate.conf        lbmethod_bytraffic.load   proxy.load           rewrite.load         usertrack.load
authz_groupfile.load  deflate.load        lbmethod_heartbeat.load   proxy_ajp.load       sed.load             vhost_alias.load
authz_host.load       dialup.load         ldap.conf                 proxy_balancer.conf  session.load         xml2enc.load
authz_owner.load      dir.conf            ldap.load                 proxy_balancer.load  session_cookie.load

用户目录().加载 存在。
您可以通过以下方式确认这些模块中已启用的模块。


azureuser@test-azure-gen:/etc/apache2$ ls mods-enabled/
access_compat.load  authn_core.load  authz_user.load  deflate.load  filter.load       mpm_prefork.load  php8.1.load      setenvif.load
alias.conf          authn_file.load  autoindex.conf   dir.conf      mime.conf         negotiation.conf  reqtimeout.conf  status.conf
alias.load          authz_core.load  autoindex.load   dir.load      mime.load         negotiation.load  reqtimeout.load  status.load
auth_basic.load     authz_host.load  deflate.conf     env.load      mpm_prefork.conf  php8.1.conf       setenvif.conf

要启用,请使用a2enmod命令。

azureuser@test-azure-gen:/etc/apache2$ sudo a2enmod userdir
Enabling module userdir.
To activate the new configuration, you need to run:
  systemctl restart apache2

为了使设置生效,请重新启动apache2。

azureuser@test-azure-gen:/etc/apache2$ sudo systemctl restart apache2

さて、ブラウザでリロードすると表示が変わりました。

image.png

这是因为/home/nanbuwks/public_html的权限没有公开。

azureuser@test-azure-gen:/etc/apache2$ su - example
Password: 
example@test-azure-gen:~$ ls -alh
total 32K
drwxr-x--- 3 example example 4.0K Apr  8 04:13 .
drwxr-xr-x 4 root    root    4.0K Apr  8 04:09 ..
-rw------- 1 example example  208 Apr  8 04:13 .bash_history
-rw-r--r-- 1 example example  220 Apr  8 04:09 .bash_logout
-rw-r--r-- 1 example example 3.7K Apr  8 04:09 .bashrc
-rw-r--r-- 1 example example  807 Apr  8 04:09 .profile
-rw------- 1 example example  901 Apr  8 04:11 .viminfo
drwxrwxr-x 2 example example 4.0K Apr  8 04:11 public_html
example@test-azure-gen:~$ cd public_html/
example@test-azure-gen:~/public_html$ ls -alh
total 12K
drwxrwxr-x 2 example example 4.0K Apr  8 04:11 .
drwxr-x--- 3 example example 4.0K Apr  8 04:13 ..
-rw-r--r-- 1 example example  119 Apr  8 04:10 example.html

example.html は 644, public_html は 775 になっています。この2つは大丈夫ぽいですね。
実は . が 750 になってました。ディレクトリの実行権を追加しないと、ディレクトリの中身が読めなくなっているます。apache2 は www-data ユーザで実行しているので、パーミッションの3桁目が 0 になっているということは実行権が無いのでその配下の public_html とか example.html にアクセス権があってもブラウザから読めないということになっています。

example@test-azure-gen:~/public_html$ cd ..
example@test-azure-gen:~$ chmod 751 .

这样,它可以在浏览器中显示出来了。

image.png

设置虚拟主机

apache で管理しているサイトは、モジュールと同じような考え方で enable / disable を個別に行います。
今回は、 example.com でアクセスすると /home/example/public_html の中身が見えるようにします。

azureuser@test-azure-gen:/etc/apache2$ ls sites-available/
000-default.conf  default-ssl.conf
azureuser@test-azure-gen:/etc/apache2$ ls sites-enabled/
000-default.conf

复制000-default.conf文件,创建example.com的配置。


azureuser@test-azure-gen:/etc/apache2$ sudo cp  sites-available/000-default.conf sites-available/example.com.conf
azureuser@test-azure-gen:/etc/apache2$ sudo vim sites-available/example.com.conf

我根据以下方式进行了内部设计。


<VirtualHost *:80>
        ServerName example.com
        ServerAlias www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /home/example/public_html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

例子.com作为一个示例域名,在正常情况下将以以下方式显示。

image.png

域名信息如下所示。
我使用本地的PC(这次是Ubuntu 22.04机器)使用了dig命令。


$  dig example.com

; <<>> DiG 9.18.1-1ubuntu1.3-Ubuntu <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29884
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 5

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;example.com.			IN	A

;; ANSWER SECTION:
example.com.		55	IN	A	93.184.216.34

;; AUTHORITY SECTION:
example.com.		55	IN	NS	b.iana-servers.net.
example.com.		55	IN	NS	a.iana-servers.net.

;; ADDITIONAL SECTION:
b.iana-servers.net.	55	IN	AAAA	2001:500:8d::53
b.iana-servers.net.	55	IN	A	199.43.133.53
a.iana-servers.net.	55	IN	AAAA	2001:500:8f::53
a.iana-servers.net.	55	IN	A	199.43.135.53

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Sat Apr 08 13:27:01 JST 2023
;; MSG SIZE  rcvd: 192

我在本地计算机上使用Ubuntu 22.04。我已经按照以下方式编辑了它的/etc/hosts文件。

(Azure上バーチャルサーバのIPアドレス)  example.com
(Azure上バーチャルサーバのIPアドレス)  www.example.com
127.0.0.1       localhost
127.0.1.1       nanbuwks-B550M-S2H

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

最初の2行を追加しています。

(Azure上バーチャルサーバのIPアドレス) が 123.456.789.012 とすると、

123.456.789.012   example.com
123.456.789.012   www.example.com

这就是就是这个意思。

我会确认是否能够反映出来。

$ dig example.com

; <<>> DiG 9.18.1-1ubuntu1.3-Ubuntu <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21189
;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;example.com.			IN	A

;; ANSWER SECTION:
example.com.		0	IN	A	(Azure上バーチャルサーバのIPアドレス)

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Sat Apr 08 13:28:20 JST 2023
;; MSG SIZE  rcvd: 56

重新加载浏览器。为了禁用缓存,使用 Shift 键进行了重新加载。

image.png

我可以看到/home/example/public_html的内容。

广告
将在 10 秒后关闭
bannerAds