在Arch Linux中使用“Nginx Web Server”创建虚拟主机,密码保护目录和SSL证书

以前的Arch Linux'LEMP'文章只是介绍了安装网络服务(Nginx,MySQL数据库和PhpMyAdmin)的基本功能,并配置了MySQL服务器和PhpMyadmin所需的最低安全性。

Arch Linux上有用的Nginx配置

本主题它是严格相关的Arch Linux的LEMP前安装并指导您完成设置更复杂的配置为LEMP叠加,特别是Nginx的 Web服务器的配置,如创建虚拟主机 ,可以使用密码保护目录 ,创建和配置HTTP安全套接字层 , HTTP重定向不安全到HTTPS,也将为您呈现一些有用的bash脚本,这将缓解激活虚拟主机的工作,并生成SSL证书和密钥

要求

在Arch Linux中使用MariaDB数据库安装LEMP

第1步:在Nginx上启用虚拟主机

其中,以使虚拟主机是使用最简单的方法, 包括主Nginx的配置文件,这使得进一步的配置更简单,高效的工作,因为你可以为每一个新的主机创建简单的文件并保存主配置文件清洁语句。

这种方法的工作方式相同如Apache Web服务器上,你需要做的第一件事就是到指定的Nginx应该读文件指令的新的URI路径。

1.所以,开nginx.conf主文件位于的/ etc / nginx的/系统路径,并在底部,最后花括号之前,“}”增加未来在哪里虚拟主机配置文件将驻留的路径。

$ sudo nano /etc/nginx/nginx.conf

在底部添加以下语句。

include /etc/nginx/sites-enabled/*.conf;

在Nginx上启用虚拟主机

这个指令告诉nginx应该读那些中找到的所有文件/ etc / nginx的/ /该用的.conf扩展名结尾启用的站点- 。

2.下一步是创建支持网站的目录和另一个名为网站可用 ,您存储所有的虚拟主机配置文件。

$ sudo mkdir /etc/nginx/sites-available /etc/nginx/sites-enabled

3.现在是时候创建一个新的虚拟主机。 这个例子将使用系统的IP地址作为虚拟主机名,因此创建一个新的文件名为名称ip.conf。

sudo nano /etc/nginx/sites-available/name-ip.conf

添加以下内容。

## File content ##
server {
listen 80;
server_name 192.168.1.33;
access_log /var/log/nginx/192.168.1.33.access.log;
error_log /var/log/nginx/192.168.1.33.error.log;
root /srv/http;
location / {
index index.html index.htm index.php;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
location /phpmyadmin {
rewrite ^/* /phpMyAdmin last;
}
location ~ \.php$ {
#fastcgi_pass 127.0.0.1:9000; (depending on your php-fpm socket configuration)
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
}

创建新虚拟主机

激活虚拟主机的指令是在监听端口服务器名称声明。 此外,另一个重要的指导这里是指向Nginx的虚拟主机服务从/ SRV / HTTP /系统路径文件内容根本声明。

4,最后一步是创建/ SRV / HTTP /目录下,并提供Nginx的读取(使用符号连接) 名称ip.conf文件配置,然后重新启动守护使新的配置可见。

$ sudo mkdir /srv/http/
$ sudo ln -s /etc/nginx/sites-available/name-ip.conf /etc/nginx/sites-enabled/
$ sudo systemctl restart nginx

启动Nginx Web服务器

5.要验证它,将浏览器指向门系统IP地址,你应该看到的网页内容是从http不同://本地主机 在这里,我添加了一个小的PHP脚本,还检查像下面的截图FastCGI的PHP配置。

$ sudo nano /srv/http/info.php
## File content ##
<?php
phpinfo();
?>

验证FastCGI PHP配置

6.我已经开发了自己的Nginx的启用或禁用虚拟主机另一种方法是一个更优雅的之一,它来自Apache a2eniste脚本的启发。

要使用此方法打开一个文件编辑器,并创建一个新的文件,名为n2ensite,与下面的内容你的$ HOME路径,使其可执行文件,以root权限运行它,并通过作为一个选项到新的虚拟主机名不带的.conf结束(根据您的需要自由修改它)。

$ sudo nano n2ensite
## File content ##
#!/bin/bash
if test -d /etc/nginx/sites-available && test -d /etc/nginx/sites-enabled  ; then
echo "-----------------------------------------------"
else
mkdir /etc/nginx/sites-available
mkdir /etc/nginx/sites-enabled
fi
avail=/etc/nginx/sites-available/$1.conf
enabled=/etc/nginx/sites-enabled/
site=`ls /etc/nginx/sites-available/`
if [ "$#" != "1" ]; then
echo "Use script: n2ensite virtual_site"
echo -e "\nAvailable virtual hosts:\n$site"
exit 0
else
if test -e $avail; then
sudo ln -s $avail $enabled
else
echo -e "$avail virtual host does not exist! Please create one!\n$site"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Success!! Now restart nginx server: sudo systemctl restart nginx"
else
echo  -e "Virtual host $avail does not exist!\nPlease see available virtual hosts:\n$site"
exit 0
fi
fi

使用a2eniste脚本

使它可执行并运行它作为显示。

$ sudo chmod +x n2ensite
$ sudo ./n2ensite your_virtual_host

启动虚拟主机

7.要禁用虚拟主机创建一个包含以下内容的新n2dissite文件,并与上述应用相同的设置。

$ sudo nano n2dissite
## File content ##
#!/bin/bash
avail=/etc/nginx/sites-enabled/$1.conf
enabled=/etc/nginx/sites-enabled
site=`ls /etc/nginx/sites-enabled/`
if [ "$#" != "1" ]; then
echo "Use script: n2dissite virtual_site"
echo -e "\nAvailable virtual hosts: \n$site"
exit 0
else
if test -e $avail; then
sudo rm  $avail
else
echo -e "$avail virtual host does not exist! Exiting!"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Error!! Could not remove $avail virtual host!"
else
echo  -e "Success! $avail has been removed!\nPlease restart Nginx: sudo systemctl restart nginx"
exit 0
fi
fi

禁用虚拟主机

8.现在你可以使用这个两个脚本来启用或禁用任何虚拟主机,但如果你想将它作为应用系统范围的命令只是两个脚本复制到/ usr / local / bin目录/然后你可以使用它,而无需指定路径。

$ sudo cp n2ensite n2dissite /usr/local/bin/

使用n2ensite脚本启用或禁用主机

第2步:在Nginx上使用虚拟主机启用SSL

SSL( 安全套接字层 )是设计用来加密通过网络或因特网,这使得可以使用对称/非对称加密密钥通过安全通道发送的数据流与在Arch Linux的由OpenSSL软件包提供HTTP连接的协议。

$ sudo pacman -S openssl

安装Openssl软件包

9.要启用与Nginx的HTTPS连接的第一个认为你需要做的是产生虚拟主机密钥。 此外,为了简化事情,我已经开发了一个小的脚本, 在/ etc / nginx的/ SSL目录路径自动生成加密密钥,使用虚拟主机命名为键名称。

创建一个名为nginx_gen_ssl文件,并添加如下内容。

$ sudo nano nginx_gen_ssl
## File content ##
#!/bin/bash
mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
echo -e "Enter your virtual host FQDN: \nThis will generate the default name for Nginx  SSL certificate!"
read cert
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out $cert.key
chmod 600 $cert.key
openssl req -new -key $cert.key -out $cert.csr
openssl x509 -req -days 365 -in $cert.csr -signkey $cert.key -out $cert.crt
echo -e " The certificate $cert has been generated!\nPlease link it to nginx ssl available website!"
ls -all /etc/nginx/ssl
exit 0

生成虚拟主机密钥

10.该脚本创建后追加执行权限,运行它,并为您的证书选项,最重要的一个是通用名称字段(添加官方域名在这里),并留下密码和可选的公司字段为空。

$ sudo chmod +x nginx_gen_ssl
$ sudo ./nginx_gen_ssl

设置执行权限

生成SSL密钥

在密钥生成任务结束时,将显示Nginx ssl目录下所有可用密钥的列表。

列出所有可用的键

此外,如果你想要这个脚本用作系统命令,复制或移动到/ usr / local / bin目录/。

$ sudo mv nginx_gen_ssl  /usr/local/bin

必要Nginx的SSL虚拟主机11后,我们生成的密钥是时候实际创建SSL虚拟主机配置文件。 使用虚拟主机在同一个系统的IP地址如上Server_Name上的指令,但通过之前的.conf追加SSL稍微改变虚拟主机文件名,提醒你该文件表示名-IP SSL虚拟主机。

$ sudo nano /etc/nginx/sites-availabe/name-ip-ssl.conf

在这个文件中的变化监听端口语句443 SSL,并提供先前创建看起来像下面摘录的那些SSL和证书密钥文件的路径。

## File content ##
server {
listen 443 ssl;
server_name 192.168.1.33;
ssl_certificate     /etc/nginx/ssl/192.168.1.33.crt;
ssl_certificate_key  /etc/nginx/ssl/192.168.1.33.key;
ssl_session_cache    shared:SSL:1m;
ssl_session_timeout  5m;
ssl_ciphers  HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers  on;
access_log /var/log/nginx/192.168.1.33-ssl.access.log;
error_log /var/log/nginx/192.168.1.33-ssl.error.log;
root /srv/http;
location / {
index index.html index.htm index.php;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
location /phpmyadmin {
rewrite ^/* /phpMyAdmin last;
}
location ~ \.php$ {
#fastcgi_pass 127.0.0.1:9000; (depending on your php-fpm socket configuration)
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
}

创建SSL虚拟主机

12.文件创建后使用n2ensite脚本或ln命令行来激活它(创建中启用站点目录的文件的符号链接),然后重新启动Nginx的守护进程以应用设置。

$ sudo ./n2ensite name-ip-ssl
OR
$ sudo ln -s /etc/nginx/sites-available/name-ip-ssl.conf /etc/nginx/sites-enabled/
$ sudo systemctl restart nginx

活动SSL虚拟主机

13.你的浏览器再次指向拱门IP地址 ,但使用HTTPS协议,这个时候- https://192.168.1.33在我的系统-以及连接不可信安全错误应该出现( 添加并确认安全例外走得更远页)。

验证HTTPS连接

验证虚拟主机内容

验证PHP配置

正如你现在可以看到你的Nginx虚拟主机服务使用HTTP安全连接相同的内容以前的名称,IP主机,但这个时候。

第3步:通过虚拟主机访问PhpMyAdmin

如果虚拟主机上的Nginx启用,我们无法再访问到http://本地主机路径内容(使用内容如果不是采用其他配置环回IP地址或系统IP地址,本地主机通常提供),因为我们使用的Arch系统,IP作为服务器名称等等我们的内容路径已更改。

14.获得通过网页访问phpMyAdmin最简单的方法是创建一个象征性的/ usr /共享/ webapps /下的phpMyAdmin之间/路径和新定义的虚拟主机路径(/ SRV / HTTP)链接。

$ sudo ln -s /usr/share/webapps/phpMyAdmin/ /srv/http/

你执行上述命令后15,刷新页面,你会看到一个新的文件夹phpMyAdmin的出现,如果Nginx的虚拟主机启用自动索引陈述或者直接指向URL到phpMyAdmin文件夹https://开头arch_IP / phpMyAdmin的

16.如果你想在浏览器中编辑消毒phpMyAdmin的字符串您的虚拟主机文件,并添加下服务器块以下的内容。

location /phpmyadmin {
rewrite ^/* /phpMyAdmin last;
}

通过虚拟主机访问PhpMyAdmin

第4步:在Nginx上启用密码保护目录

与Apache,Nginx的使用HttpAuthBasic模块,使受密码保护目录 ,但不提供任何工具来创建一个加密htpasswd文件。

17.为了实现与Nginx的拱Linux目录密码保护安装Apache Web服务器,并使用其工具生成一个加密的.htaccess文件。

$ sudo pacman -S apache

18.当你已经安装了Apache下创建一个新的目录/ etc / nginx的/直觉名为passwd其中htpasswd文件将被存储和使用htpasswd的命令与-c开关第一次添加的用户生成文件,然后如果你想添加更多用户使用的htpasswd没有-c开关。

$ sudo mkdir /etc/nginx/passwd
$ sudo htpasswd -c /etc/nginx/passwd/.htpasswd first_user
$ sudo htpasswd /etc/nginx/passwd/.htpasswd second_user
$ sudo htpasswd /etc/nginx/passwd/.htpasswd third_user

启用密码保护目录

19.为了保护其所有子文件夹和文件名,IP-SSL虚拟主机根/ SRV / HTTP /服务路径下它添加了以下说明您的虚拟主机服务器块中根下的指令,并把它指向绝对的.htpasswd文件路径。

auth_basic "Restricted Website";
auth_basic_user_file /etc/nginx/passwd/.htpasswd;

受限网站配置

20.重新启动后Nginx的服务,刷新页面,一个验证所需的弹出应该出现,要求您提供凭据。

验证要求

现在,您已成功启用Nginx的受密码保护目录 ,但要知道,在同一时间Apache Web服务器被安装在您的系统,以便确保它保持禁用,任何方式不启动它,因为会导致端口,Nginx的冲突。

第5步:在Nginx上将HTTP重定向到HTTPS

21.如果你喜欢的浏览器自动重定向所有不安全的HTTP请求到HTTPS协议打开和编辑你非SSL虚拟主机和服务器名称下指令添加下面的指令。

rewrite        ^ https://$server_name$request_uri? permanent;

将HTTP重定向到HTTPS

所有提出的这篇文章,其中一个的Arch Linux系统作为服务器下进行的设置,但大多数人,尤其是那些关于Nginx的配置文件,可在大多数Linux系统略有差异。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏