{"id":28547,"date":"2023-12-29T18:45:03","date_gmt":"2024-01-10T19:13:32","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%be%9ecentos_webserver%e6%a7%8b%e5%bb%ba%e5%88%b0https%e9%80%a3%e6%8e%a5-2\/"},"modified":"2025-08-12T08:47:19","modified_gmt":"2025-08-12T00:47:19","slug":"%e5%be%9ecentos_webserver%e6%a7%8b%e5%bb%ba%e5%88%b0https%e9%80%a3%e6%8e%a5-2","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%be%9ecentos_webserver%e6%a7%8b%e5%bb%ba%e5%88%b0https%e9%80%a3%e6%8e%a5-2\/","title":{"rendered":"\u5f9eCentOS_WebServer\u69cb\u5efa\u5230HTTPS\u9023\u63a5"},"content":{"rendered":"<h1>\u5efa\u7acb\u7f51\u9875\u670d\u52a1\u5668<\/p>\n<h3>\u73af\u5883\u4fe1\u606fCentOS-8.5.2111 \u7684\u542b\u4e49\u662f\u4ec0\u4e48\uff1f<\/p>\n<div>\n<div class=\"post-table\">\u30d1\u30c3\u30b1\u30fc\u30b8\u540d\u30d0\u30fc\u30b8\u30e7\u30f3httpd2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64httpd-tools2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64httpd-devel2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64httpd-maunal2.4.37-43.module_el8.5.0+1022+b541f3b1.noarch<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">WebServer<\/ul>\n<\/li>\n<\/ul>\n<p>192.0.2.1\/24<\/p>\n<h2>\u5b89\u88c5\u8f6f\u4ef6\u5305\u65e0\u8bba\u662f\u5728dnf\u8fd8\u662fyum\u547d\u4ee4\u4e2d\uff0c\u5b83\u4eec\u7684\u529f\u80fd\u662f\u76f8\u540c\u7684\uff08\u66f4\u591a\u8be6\u7ec6\u4fe1\u606f\u8bf7\u53c2\u8003\u4ee5\u4e0bURL\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code># dnf install -y httpd &amp;&amp; dnf install -y httpd-tools &amp;&amp; dnf install -y httpd-devel &amp;&amp; dnf install -y httpd-maunal\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>\u786e\u8ba4\u5b89\u88c5\u5305<\/p>\n<pre class=\"post-pre\"><code># yum list installed | grep httpd\r\n<\/code><\/pre>\n<p>\u5982\u679c\u8f93\u51fa\u663e\u793a\u201c\u65e0\u6cd5\u4f7f\u7528\u5305\u201d\uff0c\u8bf7\u786e\u8ba4\u60a8\u4f7f\u7528\u7684\u4ed3\u5e93\u662f\u5426\u65e0\u6cd5\u63d0\u4f9b\u3002<\/p>\n<pre class=\"post-pre\"><code># yum search httpd\r\n<\/code><\/pre>\n<h2>\u521b\u5efa\u76ee\u5f55\uff0c\u6539\u53d8\u6743\u9650<\/p>\n<pre class=\"post-pre\"><code># useradd www\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code># passwd www\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code># mkdir -p \/home\/www\/public_html\/cgi-bin\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code># chown -R www.www \/home\/www &amp;&amp; chmod -R 777 \/home\/www\r\n<\/code><\/pre>\n<h2>\u5c06\/etc\/httpd\/conf\/httpd.conf\u8fdb\u884c\u4fee\u6539\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\"># This is the main Apache HTTP server configuration file.  It contains the<\/span>\r\n<span class=\"c1\"># configuration directives that give the server its instructions.<\/span>\r\n<span class=\"c1\"># See &lt;URL:http:\/\/httpd.apache.org\/docs\/2.4\/&gt; for detailed information.<\/span>\r\n<span class=\"c1\"># In particular, see <\/span>\r\n<span class=\"c1\"># &lt;URL:http:\/\/httpd.apache.org\/docs\/2.4\/mod\/directives.html&gt;<\/span>\r\n<span class=\"c1\"># for a discussion of each configuration directive.<\/span>\r\n<span class=\"c1\"># See the httpd.conf(5) man page for more information on this configuration,<\/span>\r\n<span class=\"c1\"># and httpd.service(8) on using and configuring the httpd service.<\/span>\r\n<span class=\"c1\">#\r\n# Do NOT simply read the instructions in here without understanding<\/span>\r\n<span class=\"c1\"># what they do.  They're here only as hints or reminders.  If you are unsure<\/span>\r\n<span class=\"c1\"># consult the online docs. You have been warned.  <\/span>\r\n<span class=\"c1\">#\r\n# Configuration and logfile names: If the filenames you specify for many<\/span>\r\n<span class=\"c1\"># of the server's control files begin with \"\/\" (or \"drive:\/\" for Win32), the<\/span>\r\n<span class=\"c1\"># server will use that explicit path.  If the filenames do *not* begin<\/span>\r\n<span class=\"c1\"># with \"\/\", the value of ServerRoot is prepended -- so 'log\/access_log'<\/span>\r\n<span class=\"c1\"># with ServerRoot set to '\/www' will be interpreted by the<\/span>\r\n<span class=\"c1\"># server as '\/www\/log\/access_log', where as '\/log\/access_log' will be<\/span>\r\n<span class=\"c1\"># interpreted as '\/log\/access_log'.<\/span>\r\n\r\n<span class=\"c1\">#\r\n# ServerRoot: The top of the directory tree under which the server's<\/span>\r\n<span class=\"c1\"># configuration, error, and log files are kept.<\/span>\r\n<span class=\"c1\">#\r\n# Do not add a slash at the end of the directory path.  If you point<\/span>\r\n<span class=\"c1\"># ServerRoot at a non-local disk, be sure to specify a local disk on the<\/span>\r\n<span class=\"c1\"># Mutex directive, if file-based mutexes are used.  If you wish to share the<\/span>\r\n<span class=\"c1\"># same ServerRoot for multiple httpd daemons, you will need to change at<\/span>\r\n<span class=\"c1\"># least PidFile.<\/span>\r\n<span class=\"c1\">#\r\n<\/span>\r\n<span class=\"nc\">ServerRoot<\/span> <span class=\"s2\">\"\/etc\/httpd\"<\/span>\r\n\r\n<span class=\"nc\">KeepAlive<\/span> <span class=\"nc\">On<\/span>\r\n<span class=\"nc\">MaxKeepAliveRequests<\/span> <span class=\"mi\">100<\/span>\r\n<span class=\"nc\">KeepAliveTimeout<\/span> <span class=\"mi\">5<\/span>\r\n\r\n<span class=\"c1\">#\r\n# Listen: Allows you to bind Apache to specific IP addresses and\/or<\/span>\r\n<span class=\"c1\"># ports, instead of the default. See also the &lt;VirtualHost&gt;<\/span>\r\n<span class=\"c1\"># directive.<\/span>\r\n<span class=\"c1\">#\r\n# Change this to Listen on specific IP addresses as shown below to <\/span>\r\n<span class=\"c1\"># prevent Apache from glomming onto all bound IP addresses.<\/span>\r\n<span class=\"c1\">#\r\n#Listen 12.34.56.78:80<\/span>\r\n<span class=\"nc\">Listen<\/span> <span class=\"mi\">80<\/span>\r\n\r\n<span class=\"c1\">#\r\n# Dynamic Shared Object (DSO) Support<\/span>\r\n<span class=\"c1\">#\r\n# To be able to use the functionality of a module which was built as a DSO you<\/span>\r\n<span class=\"c1\"># have to place corresponding `LoadModule' lines at this location so the<\/span>\r\n<span class=\"c1\"># directives contained in it are actually available _before_ they are used.<\/span>\r\n<span class=\"c1\"># Statically compiled modules (those listed by `httpd -l') do not need<\/span>\r\n<span class=\"c1\"># to be loaded here.<\/span>\r\n<span class=\"c1\">#\r\n# Example:<\/span>\r\n<span class=\"c1\"># LoadModule foo_module modules\/mod_foo.so<\/span>\r\n<span class=\"c1\">#\r\nInclude conf.modules.d\/*.conf<\/span>\r\n\r\n<span class=\"c1\">#\r\n# If you wish httpd to run as a different user or group, you must run<\/span>\r\n<span class=\"c1\"># httpd as root initially and it will switch.  <\/span>\r\n<span class=\"c1\">#\r\n# User\/Group: The name (or #number) of the user\/group to run httpd as.<\/span>\r\n<span class=\"c1\"># It is usually good practice to create a dedicated user and group for<\/span>\r\n<span class=\"c1\"># running httpd, as with most system services.<\/span>\r\n\r\n<span class=\"nc\">User<\/span> <span class=\"n\">www<\/span>\r\n<span class=\"nc\">Group<\/span> <span class=\"n\">www<\/span>\r\n\r\n<span class=\"c1\"># 'Main' server configuration<\/span>\r\n<span class=\"c1\">#\r\n# The directives in this section set up the values used by the 'main'<\/span>\r\n<span class=\"c1\"># server, which responds to any requests that aren't handled by a<\/span>\r\n<span class=\"c1\"># &lt;VirtualHost&gt; definition.  These values also provide defaults for<\/span>\r\n<span class=\"c1\"># any &lt;VirtualHost&gt; containers you may define later in the file.<\/span>\r\n<span class=\"c1\">#\r\n# All of these directives may appear inside &lt;VirtualHost&gt; containers,<\/span>\r\n<span class=\"c1\"># in which case these default settings will be overridden for the<\/span>\r\n<span class=\"c1\"># virtual host being defined.<\/span>\r\n<span class=\"c1\">#\r\n<\/span>\r\n<span class=\"c1\">#\r\n# ServerAdmin: Your address, where problems with the server should be<\/span>\r\n<span class=\"c1\"># e-mailed.  This address appears on some server-generated pages, such<\/span>\r\n<span class=\"c1\"># as error documents.  e.g. admin@your-domain.com<\/span>\r\n<span class=\"c1\">#\r\n<\/span>\r\n<span class=\"nc\">ServerAdmin<\/span> <span class=\"n\">root<\/span><span class=\"o\">@<\/span><span class=\"n\">localhost<\/span>\r\n\r\n<span class=\"c1\">#\r\n# ServerName gives the name and port that the server uses to identify itself.<\/span>\r\n<span class=\"c1\"># This can often be determined automatically, but we recommend you specify<\/span>\r\n<span class=\"c1\"># it explicitly to prevent problems during startup.<\/span>\r\n<span class=\"c1\">#\r\n# If your host doesn't have a registered DNS name, enter its IP address here.<\/span>\r\n<span class=\"c1\">#\r\n<\/span>\r\n<span class=\"nc\">ServerName<\/span> <span class=\"n\">hoge1<\/span><span class=\"mf\">.<\/span><span class=\"n\">com<\/span><span class=\"o\">:<\/span><span class=\"mi\">80<\/span>\r\n\r\n<span class=\"c1\">#\r\n# Deny access to the entirety of your server's filesystem. You must<\/span>\r\n<span class=\"c1\"># explicitly permit access to web content directories in other <\/span>\r\n<span class=\"c1\"># &lt;Directory&gt; blocks below.<\/span>\r\n<span class=\"c1\">#\r\n<\/span>\r\n<span class=\"o\">&lt;<\/span><span class=\"nc\">Directory<\/span> <span class=\"o\">\/&gt;<\/span>\r\n    <span class=\"nc\">AllowOverride<\/span> <span class=\"nc\">All<\/span>\r\n    <span class=\"k\">Require<\/span> <span class=\"n\">all<\/span> <span class=\"n\">denied<\/span>\r\n    <span class=\"nc\">Options<\/span> <span class=\"nc\">All<\/span>\r\n<span class=\"o\">&lt;\/<\/span><span class=\"nc\">Directory<\/span><span class=\"o\">&gt;<\/span>\r\n\r\n<span class=\"c1\">#\r\n# Note that from this point forward you must specifically allow<\/span>\r\n<span class=\"c1\"># particular features to be enabled - so if something's not working as<\/span>\r\n<span class=\"c1\"># you might expect, make sure that you have specifically enabled it<\/span>\r\n<span class=\"c1\"># below.<\/span>\r\n<span class=\"c1\">#\r\n<\/span>\r\n<span class=\"c1\">#\r\n# DocumentRoot: The directory out of which you will serve your<\/span>\r\n<span class=\"c1\"># documents. By default, all requests are taken from this directory, but<\/span>\r\n<span class=\"c1\"># symbolic links and aliases may be used to point to other locations.<\/span>\r\n<span class=\"c1\">#\r\n<\/span>\r\n<span class=\"nc\">DocumentRoot<\/span> <span class=\"s2\">\"\/home\/www\/public_html\"<\/span>\r\n\r\n<span class=\"c1\">#\r\n# Relax access to content within \/var\/www.<\/span>\r\n<span class=\"c1\">#\r\n<\/span>\r\n<span class=\"o\">&lt;<\/span><span class=\"nc\">Directory<\/span> <span class=\"s2\">\"\/var\/www\"<\/span><span class=\"o\">&gt;<\/span>\r\n    <span class=\"nc\">AllowOverride<\/span> <span class=\"nc\">None<\/span>\r\n    <span class=\"c1\"># Allow open access:<\/span>\r\n    <span class=\"k\">Require<\/span> <span class=\"n\">all<\/span> <span class=\"n\">granted<\/span>\r\n<span class=\"o\">&lt;\/<\/span><span class=\"nc\">Directory<\/span><span class=\"o\">&gt;<\/span>\r\n\r\n<span class=\"c1\"># Further relax access to the default document root:<\/span>\r\n<span class=\"o\">&lt;<\/span><span class=\"nc\">Directory<\/span> <span class=\"s2\">\"\/var\/www\/html\"<\/span><span class=\"o\">&gt;<\/span>\r\n    <span class=\"c1\">#\r\n    # Possible values for the Options directive are \"None\", \"All\",<\/span>\r\n    <span class=\"c1\"># or any combination of:<\/span>\r\n    <span class=\"c1\">#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews<\/span>\r\n    <span class=\"c1\">#\r\n    # Note that \"MultiViews\" must be named *explicitly* --- \"Options All\"<\/span>\r\n    <span class=\"c1\"># doesn't give it to you.<\/span>\r\n    <span class=\"c1\">#\r\n    # The Options directive is both complicated and important.  Please see<\/span>\r\n    <span class=\"c1\"># http:\/\/httpd.apache.org\/docs\/2.4\/mod\/core.html#options<\/span>\r\n    <span class=\"c1\"># for more information.<\/span>\r\n    <span class=\"c1\">#\r\n    <\/span>\r\n    <span class=\"nc\">Options<\/span> <span class=\"nc\">FollowSymLinks<\/span>\r\n\r\n    <span class=\"c1\">#\r\n    # AllowOverride controls what directives may be placed in .htaccess files.<\/span>\r\n    <span class=\"c1\"># It can be \"All\", \"None\", or any combination of the keywords:<\/span>\r\n    <span class=\"c1\">#   Options FileInfo AuthConfig Limit<\/span>\r\n    <span class=\"c1\">#\r\n    <\/span>\r\n    <span class=\"nc\">AllowOverride<\/span> <span class=\"nc\">None<\/span>\r\n\r\n    <span class=\"c1\">#\r\n    # Controls who can get stuff from this server.<\/span>\r\n    <span class=\"c1\">#\r\n    Require all granted<\/span>\r\n<span class=\"o\">&lt;\/<\/span><span class=\"nc\">Directory<\/span><span class=\"o\">&gt;<\/span>\r\n\r\n<span class=\"c1\">#\r\n# DirectoryIndex: sets the file that Apache will serve if a directory<\/span>\r\n<span class=\"c1\"># is requested.<\/span>\r\n<span class=\"c1\">#\r\n<\/span>\r\n<span class=\"o\">&lt;<\/span><span class=\"nc\">IfModule<\/span> <span class=\"n\">dir_module<\/span><span class=\"o\">&gt;<\/span>\r\n    <span class=\"nc\">DirectoryIndex<\/span> <span class=\"n\">index<\/span><span class=\"mf\">.<\/span><span class=\"n\">html<\/span>\r\n<span class=\"o\">&lt;\/<\/span><span class=\"nc\">IfModule<\/span><span class=\"o\">&gt;<\/span>\r\n\r\n<span class=\"c1\">#\r\n# The following lines prevent .htaccess and .htpasswd files from being <\/span>\r\n<span class=\"c1\"># viewed by Web clients. <\/span>\r\n<span class=\"c1\">#\r\n<\/span>\r\n<span class=\"o\">&lt;<\/span><span class=\"nc\">Files<\/span> <span class=\"s2\">\".ht*\"<\/span><span class=\"o\">&gt;<\/span>\r\n    <span class=\"k\">Require<\/span> <span class=\"n\">all<\/span> <span class=\"n\">granted<\/span>\r\n<span class=\"o\">&lt;\/<\/span><span class=\"nc\">Files<\/span><span class=\"o\">&gt;<\/span>\r\n\r\n<span class=\"c1\">#\r\n# ErrorLog: The location of the error log file.<\/span>\r\n<span class=\"c1\"># If you do not specify an ErrorLog directive within a &lt;VirtualHost&gt;<\/span>\r\n<span class=\"c1\"># container, error messages relating to that virtual host will be<\/span>\r\n<span class=\"c1\"># logged here.  If you *do* define an error logfile for a &lt;VirtualHost&gt;<\/span>\r\n<span class=\"c1\"># container, that host's errors will be logged there and not here.<\/span>\r\n<span class=\"c1\">#\r\nErrorLog \"logs\/error_log\"<\/span>\r\n\r\n<span class=\"c1\">#\r\n# LogLevel: Control the number of messages logged to the error_log.<\/span>\r\n<span class=\"c1\"># Possible values include: debug, info, notice, warn, error, crit,<\/span>\r\n<span class=\"c1\"># alert, emerg.<\/span>\r\n<span class=\"c1\">#\r\nLogLevel warn<\/span>\r\n\r\n<span class=\"o\">&lt;<\/span><span class=\"nc\">IfModule<\/span> <span class=\"n\">log_config_module<\/span><span class=\"o\">&gt;<\/span>\r\n    <span class=\"c1\">#\r\n    # The following directives define some format nicknames for use with<\/span>\r\n    <span class=\"c1\"># a CustomLog directive (see below).<\/span>\r\n    <span class=\"c1\">#\r\n    LogFormat \"%h %l %u %t \\\"%r\\\" %&gt;s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" combined<\/span>\r\n    <span class=\"nc\">LogFormat<\/span> <span class=\"s2\">\"%h %l %u %t <\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">%r<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\"> %&gt;s %b\"<\/span> <span class=\"n\">common<\/span>\r\n\r\n    <span class=\"o\">&lt;<\/span><span class=\"nc\">IfModule<\/span> <span class=\"n\">logio_module<\/span><span class=\"o\">&gt;<\/span>\r\n      <span class=\"c1\"># You need to enable mod_logio.c to use %I and %O<\/span>\r\n      <span class=\"nc\">LogFormat<\/span> <span class=\"s2\">\"%h %l %u %t <\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">%r<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\"> %&gt;s %b <\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">%<\/span><span class=\"si\">{<\/span><span class=\"nv\">Referer<\/span><span class=\"si\">}<\/span><span class=\"s2\">i<\/span><span class=\"se\">\\\"<\/span> <span class=\"se\">\\\"<\/span><span class=\"s2\">%<\/span><span class=\"si\">{<\/span><span class=\"nv\">User-Agent<\/span><span class=\"si\">}<\/span><span class=\"s2\">i<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\"> %I %O\"<\/span> <span class=\"n\">combinedio<\/span>\r\n    <span class=\"o\">&lt;\/<\/span><span class=\"nc\">IfModule<\/span><span class=\"o\">&gt;<\/span>\r\n\r\n    <span class=\"c1\">#\r\n    # The location and format of the access logfile (Common Logfile Format).<\/span>\r\n    <span class=\"c1\"># If you do not define any access logfiles within a &lt;VirtualHost&gt;<\/span>\r\n    <span class=\"c1\"># container, they will be logged here.  Contrariwise, if you *do*<\/span>\r\n    <span class=\"c1\"># define per-&lt;VirtualHost&gt; access logfiles, transactions will be<\/span>\r\n    <span class=\"c1\"># logged therein and *not* in this file.<\/span>\r\n    <span class=\"c1\">#\r\n    #CustomLog \"logs\/access_log\" common<\/span>\r\n\r\n    <span class=\"c1\">#\r\n    # If you prefer a logfile with access, agent, and referer information<\/span>\r\n    <span class=\"c1\"># (Combined Logfile Format) you can use the following directive.<\/span>\r\n    <span class=\"c1\">#\r\n    CustomLog \"logs\/access_log\" combined<\/span>\r\n<span class=\"o\">&lt;\/<\/span><span class=\"nc\">IfModule<\/span><span class=\"o\">&gt;<\/span>\r\n\r\n<span class=\"o\">&lt;<\/span><span class=\"nc\">IfModule<\/span> <span class=\"n\">alias_module<\/span><span class=\"o\">&gt;<\/span>\r\n    <span class=\"c1\">#\r\n    # Redirect: Allows you to tell clients about documents that used to <\/span>\r\n    <span class=\"c1\"># exist in your server's namespace, but do not anymore. The client <\/span>\r\n    <span class=\"c1\"># will make a new request for the document at its new location.<\/span>\r\n    <span class=\"c1\"># Example:<\/span>\r\n    <span class=\"c1\"># Redirect permanent \/foo http:\/\/www.example.com\/bar<\/span>\r\n\r\n    <span class=\"c1\">#\r\n    # Alias: Maps web paths into filesystem paths and is used to<\/span>\r\n    <span class=\"c1\"># access content that does not live under the DocumentRoot.<\/span>\r\n    <span class=\"c1\"># Example:<\/span>\r\n    <span class=\"c1\"># Alias \/webpath \/full\/filesystem\/path<\/span>\r\n    <span class=\"c1\">#\r\n    # If you include a trailing \/ on \/webpath then the server will<\/span>\r\n    <span class=\"c1\"># require it to be present in the URL.  You will also likely<\/span>\r\n    <span class=\"c1\"># need to provide a &lt;Directory&gt; section to allow access to<\/span>\r\n    <span class=\"c1\"># the filesystem path.<\/span>\r\n\r\n    <span class=\"c1\">#\r\n    # ScriptAlias: This controls which directories contain server scripts. <\/span>\r\n    <span class=\"c1\"># ScriptAliases are essentially the same as Aliases, except that<\/span>\r\n    <span class=\"c1\"># documents in the target directory are treated as applications and<\/span>\r\n    <span class=\"c1\"># run by the server when requested rather than as documents sent to the<\/span>\r\n    <span class=\"c1\"># client.  The same rules about trailing \"\/\" apply to ScriptAlias<\/span>\r\n    <span class=\"c1\"># directives as to Alias.<\/span>\r\n    <span class=\"c1\">#\r\n    ScriptAlias \/cgi-bin\/ \"\/home\/www\/public_html\/cgi-bin\/\"<\/span>\r\n\r\n<span class=\"o\">&lt;\/<\/span><span class=\"nc\">IfModule<\/span><span class=\"o\">&gt;<\/span>\r\n\r\n<span class=\"c1\">#\r\n# \"\/var\/www\/cgi-bin\" should be changed to whatever your ScriptAliased<\/span>\r\n<span class=\"c1\"># CGI directory exists, if you have that configured.<\/span>\r\n<span class=\"c1\">#\r\n<\/span>\r\n<span class=\"o\">&lt;<\/span><span class=\"nc\">Directory<\/span> <span class=\"s2\">\"\/home\/www\/public_html\/cgi-bin\"<\/span><span class=\"o\">&gt;<\/span>\r\n    <span class=\"nc\">AllowOverride<\/span> <span class=\"nc\">None<\/span>\r\n    <span class=\"nc\">Options<\/span> <span class=\"nc\">Indexes<\/span> <span class=\"nc\">FollowSymLinks<\/span> <span class=\"nc\">ExecCGI<\/span>\r\n    <span class=\"nc\">Order<\/span> <span class=\"n\">allow<\/span><span class=\"p\">,<\/span><span class=\"n\">deny<\/span>\r\n    <span class=\"nc\">Allow<\/span> <span class=\"n\">from<\/span> <span class=\"n\">all<\/span>\r\n<span class=\"o\">&lt;\/<\/span><span class=\"nc\">Directory<\/span><span class=\"o\">&gt;<\/span>\r\n\r\n<span class=\"o\">&lt;<\/span><span class=\"nc\">IfModule<\/span> <span class=\"n\">mime_module<\/span><span class=\"o\">&gt;<\/span>\r\n    <span class=\"c1\">#\r\n    # TypesConfig points to the file containing the list of mappings from<\/span>\r\n    <span class=\"c1\"># filename extension to MIME-type.<\/span>\r\n    <span class=\"c1\">#\r\n    TypesConfig \/etc\/mime.types<\/span>\r\n\r\n    <span class=\"c1\">#\r\n    # AddType allows you to add to or override the MIME configuration<\/span>\r\n    <span class=\"c1\"># file specified in TypesConfig for specific file types.<\/span>\r\n    <span class=\"c1\">#\r\n    #AddType application\/x-gzip .tgz<\/span>\r\n    <span class=\"c1\">#\r\n    # AddEncoding allows you to have certain browsers uncompress<\/span>\r\n    <span class=\"c1\"># information on the fly. Note: Not all browsers support this.<\/span>\r\n    <span class=\"c1\">#\r\n    #AddEncoding x-compress .Z<\/span>\r\n    <span class=\"c1\">#AddEncoding x-gzip .gz .tgz<\/span>\r\n    <span class=\"c1\">#\r\n    # If the AddEncoding directives above are commented-out, then you<\/span>\r\n    <span class=\"c1\"># probably should define those extensions to indicate media types:<\/span>\r\n    <span class=\"c1\">#\r\n    AddType application\/x-compress .Z<\/span>\r\n    <span class=\"nc\">AddType<\/span> <span class=\"n\">application<\/span><span class=\"o\">\/<\/span><span class=\"n\">x<\/span><span class=\"o\">-<\/span><span class=\"n\">gzip<\/span> <span class=\"mf\">.<\/span><span class=\"n\">gz<\/span> <span class=\"mf\">.<\/span><span class=\"n\">tgz<\/span>\r\n\r\n    <span class=\"c1\">#\r\n    # AddHandler allows you to map certain file extensions to \"handlers\":<\/span>\r\n    <span class=\"c1\"># actions unrelated to filetype. These can be either built into the server<\/span>\r\n    <span class=\"c1\"># or added with the Action directive (see below)<\/span>\r\n    <span class=\"c1\">#\r\n    # To use CGI scripts outside of ScriptAliased directories:<\/span>\r\n    <span class=\"c1\"># (You will also need to add \"ExecCGI\" to the \"Options\" directive.)<\/span>\r\n    <span class=\"c1\">#\r\n    #AddHandler cgi-script .cgi<\/span>\r\n\r\n    <span class=\"c1\"># For type maps (negotiated resources):<\/span>\r\n    <span class=\"c1\">#AddHandler type-map var<\/span>\r\n\r\n    <span class=\"c1\">#\r\n    # Filters allow you to process content before it is sent to the client.<\/span>\r\n    <span class=\"c1\">#\r\n    # To parse .shtml files for server-side includes (SSI):<\/span>\r\n    <span class=\"c1\"># (You will also need to add \"Includes\" to the \"Options\" directive.)<\/span>\r\n    <span class=\"c1\">#\r\n    AddType text\/html .shtml<\/span>\r\n    <span class=\"nc\">AddOutputFilter<\/span> <span class=\"no\">INCLUDES<\/span> <span class=\"mf\">.<\/span><span class=\"n\">shtml<\/span>\r\n<span class=\"o\">&lt;\/<\/span><span class=\"nc\">IfModule<\/span><span class=\"o\">&gt;<\/span>\r\n\r\n<span class=\"c1\">#\r\n# Specify a default charset for all content served; this enables<\/span>\r\n<span class=\"c1\"># interpretation of all content as UTF-8 by default.  To use the <\/span>\r\n<span class=\"c1\"># default browser choice (ISO-8859-1), or to allow the META tags<\/span>\r\n<span class=\"c1\"># in HTML content to override this choice, comment out this<\/span>\r\n<span class=\"c1\"># directive:<\/span>\r\n<span class=\"c1\">#\r\nAddDefaultCharset shift_js<\/span>\r\n\r\n<span class=\"o\">&lt;<\/span><span class=\"nc\">IfModule<\/span> <span class=\"n\">mime_magic_module<\/span><span class=\"o\">&gt;<\/span>\r\n    <span class=\"c1\">#\r\n    # The mod_mime_magic module allows the server to use various hints from the<\/span>\r\n    <span class=\"c1\"># contents of the file itself to determine its type.  The MIMEMagicFile<\/span>\r\n    <span class=\"c1\"># directive tells the module where the hint definitions are located.<\/span>\r\n    <span class=\"c1\">#\r\n    MIMEMagicFile conf\/magic<\/span>\r\n<span class=\"o\">&lt;\/<\/span><span class=\"nc\">IfModule<\/span><span class=\"o\">&gt;<\/span>\r\n\r\n<span class=\"c1\">#\r\n# Customizable error responses come in three flavors:<\/span>\r\n<span class=\"c1\"># 1) plain text 2) local redirects 3) external redirects<\/span>\r\n<span class=\"c1\">#\r\n# Some examples:<\/span>\r\n<span class=\"c1\">#ErrorDocument 500 \"The server made a boo boo.\"<\/span>\r\n<span class=\"c1\">#ErrorDocument 404 \/missing.html<\/span>\r\n<span class=\"c1\">#ErrorDocument 404 \"\/cgi-bin\/missing_handler.pl\"<\/span>\r\n<span class=\"c1\">#ErrorDocument 402 http:\/\/www.example.com\/subscription_info.html<\/span>\r\n<span class=\"c1\">#\r\n<\/span>\r\n<span class=\"c1\">#\r\n# EnableMMAP and EnableSendfile: On systems that support it, <\/span>\r\n<span class=\"c1\"># memory-mapping or the sendfile syscall may be used to deliver<\/span>\r\n<span class=\"c1\"># files.  This usually improves server performance, but must<\/span>\r\n<span class=\"c1\"># be turned off when serving from networked-mounted <\/span>\r\n<span class=\"c1\"># filesystems or if support for these functions is otherwise<\/span>\r\n<span class=\"c1\"># broken on your system.<\/span>\r\n<span class=\"c1\"># Defaults if commented: EnableMMAP On, EnableSendfile Off<\/span>\r\n<span class=\"c1\">#\r\n#EnableMMAP off<\/span>\r\n<span class=\"nc\">EnableSendfile<\/span> <span class=\"n\">on<\/span>\r\n\r\n<span class=\"c1\"># Supplemental configuration<\/span>\r\n<span class=\"c1\">#\r\n# Load config files in the \"\/etc\/httpd\/conf.d\" directory, if any.<\/span>\r\n<span class=\"nc\">IncludeOptional<\/span> <span class=\"n\">conf<\/span><span class=\"mf\">.<\/span><span class=\"n\">d<\/span><span class=\"o\">\/*.<\/span><span class=\"n\">conf<\/span>\r\n<\/code><\/pre>\n<h2>\u5220\u9664\u4e0d\u5fc5\u8981\u7684\u6587\u4ef6<\/p>\n<pre class=\"post-pre\"><code># cd \/etc\/httpd\/conf.d\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code># rm autoindex.conf ; rm welcome.conf\r\n<\/code><\/pre>\n<h2>\u9009\u62e9\u8981\u5728\u7f51\u4e0a\u516c\u5f00\u7684\u6587\u4ef6<\/p>\n<pre class=\"post-pre\"><code># cd \/home\/www\/public_html\r\n<\/code><\/pre>\n<p>\u5728\/home\/www\/public_html\u76ee\u5f55\u4e0b\u521b\u5efa\u4e00\u4e2a\u53ef\u5728\u7f51\u4e0a\u516c\u5f00\u7684index.html\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code># vi index.html\r\n<\/code><\/pre>\n<p>\u5c06\u6743\u9650\u66f4\u6539\u4e3a\u5148\u524d\u521b\u5efa\u7684\u7528\u6237\u548c\u7ec4\u3002<\/p>\n<pre class=\"post-pre\"><code># chown www:www index.html\r\n<\/code><\/pre>\n<h2>\u5728\u9632\u706b\u5899\u4e2d\u6253\u5f0080\u53f7\u7aef\u53e3\u3002<\/p>\n<pre class=\"post-pre\"><code># firewall-cmd --add-service=http --permanent\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code># firewall-cmd --reload &amp;&amp; firewall-cmd --list-all\r\n<\/code><\/pre>\n<h2>\u542f\u52a8httpd<\/p>\n<pre class=\"post-pre\"><code># systemctl start httpd\r\n<\/code><\/pre>\n<p>\u5982\u679c\u8981\u8fdb\u884c\u53e5\u6cd5\u68c0\u67e5<\/p>\n<pre class=\"post-pre\"><code># httpd -t\r\n<\/code><\/pre>\n<h1>\u81ea\u5df1\u8bc1\u660e\u4e66\u5236\u4f5c<\/p>\n<h2>\u5b89\u88c5mod_ssl\u3002<\/p>\n<pre class=\"post-pre\"><code># dnf install mod_ssl\r\n<\/code><\/pre>\n<h2>\u521b\u5efa\u670d\u52a1\u5668\u79c1\u94a5\u521b\u5efa\u540d\u4e3a\u201cca.key\u201d\u7684\u6587\u4ef6<\/p>\n<pre class=\"post-pre\"><code># openssl genrsa -out ca.key 2048\r\nGenerating RSA private key, 2048 bit long modulus (2 primes)\r\n..............................................................................+++++\r\n......................+++++\r\ne is 65537 (0x010001)\r\n<\/code><\/pre>\n<h2>\u8bf7\u64b0\u5199\u8bc1\u4e66\u53d1\u884c\u8981\u6c42\u4e66\u3002\u521b\u5efa\u4e00\u4e2a\u540d\u4e3a\u201cca.csr\u201d\u7684\u8bc1\u4e66\u7b7e\u53d1\u8bf7\u6c42\uff0c\u5e76\u5411\u8ba4\u8bc1\u673a\u6784\u8981\u6c42\u9881\u53d1\u8bc1\u4e66\u3002\u7531\u4e8e\u8fd9\u662f\u81ea\u7b7e\u540d\u8bc1\u4e66\uff0c\u6240\u4ee5\u5c06\u81ea\u5df1\u4f5c\u4e3a\u7533\u8bf7\u8005\u3002<\/p>\n<pre class=\"post-pre\"><code>You are about to be asked to enter information that will be incorporated\r\ninto your certificate request.\r\nWhat you are about to enter is what is called a Distinguished Name or a DN.\r\nThere are quite a few fields but you can leave some blank\r\nFor some fields there will be a default value,\r\nIf you enter '.', the field will be left blank.\r\n-----\r\nCountry Name (2 letter code) [XX]:JP\r\nState or Province Name (full name) []:Tokyo\r\nLocality Name (eg, city) [Default City]:Shinjuku\r\nOrganization Name (eg, company) [Default Company Ltd]:        \r\nOrganizational Unit Name (eg, section) []:\r\nCommon Name (eg, your name or your server's hostname) []:root.localhost\r\nEmail Address []:\r\n\r\nPlease enter the following 'extra' attributes\r\nto be sent with your certificate request\r\nA challenge password []:\r\nAn optional company name []:\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code># echo \"subjectAltName=DNS:*.localhost,IP:192.0.2.1\" &gt; san.txt\r\n<\/code><\/pre>\n<h2>\u521b\u5efa\u670d\u52a1\u5668\u8bc1\u4e66\u8a8d\u8b49\u6a5f\u69cb\uff08\u81ea\u5df1\u70ba\u8a8d\u8b49\u6a5f\u69cb\uff09\u5c0d\u65bc\u8b49\u66f8\u7533\u8acb\u6a94\u9032\u884c\u9a57\u8b49\uff0c\u4e26\u5275\u5efa\u4e86\u670d\u52d9\u5668\u8b49\u66f8\u300cca.crt\u300d\u3002<\/p>\n<pre class=\"post-pre\"><code># openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt -extfile san.txt\r\nSignature ok\r\nsubject=C = JP, ST = Tokyo, L = Shinjuku, O = Default Company Ltd, CN = root.localhost\r\nGetting Private key\r\n<\/code><\/pre>\n<p>\u81ea\u5df1\u7684\u8457\u540d\u8bc1\u4e66\u8bbe\u7f6e<\/p>\n<pre class=\"post-pre\"><code># cp ca.crt \/etc\/pki\/tls\/certs\r\n# cp ca.key \/etc\/pki\/tls\/private\/ca.key\r\n# cp ca.csr \/etc\/pki\/tls\/private\/ca.csr\r\n<\/code><\/pre>\n<h2>\u7f16\u8f91\/etc\/httpd\/conf.d\/ssl.conf<br \/>\n\u5c06\u670d\u52a1\u5668\u8bc1\u4e66\u201cca.crt\u201d\u653e\u7f6e\u5728SSLCertificateFile\u6307\u4ee4\u4e2d\u3002<br \/>\n\u5c06\u670d\u52a1\u5668\u79c1\u94a5\u201cca.key\u201d\u653e\u7f6e\u5728SSLCertificateKeyFile\u6307\u4ee4\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\">#\r\n# When we also provide SSL we have to listen to the <\/span>\r\n<span class=\"c1\"># standard HTTPS port in addition.<\/span>\r\n<span class=\"c1\">#\r\nListen 443 https<\/span>\r\n\r\n<span class=\"c1\">##<\/span>\r\n<span class=\"c1\">##  SSL Global Context<\/span>\r\n<span class=\"c1\">##<\/span>\r\n<span class=\"c1\">##  All SSL configuration in this context applies both to<\/span>\r\n<span class=\"c1\">##  the main server and all SSL-enabled virtual hosts.<\/span>\r\n<span class=\"c1\">##<\/span>\r\n\r\n<span class=\"c1\">#   Pass Phrase Dialog:<\/span>\r\n<span class=\"c1\">#   Configure the pass phrase gathering process.<\/span>\r\n<span class=\"c1\">#   The filtering dialog program (`builtin' is a internal<\/span>\r\n<span class=\"c1\">#   terminal dialog) has to provide the pass phrase on stdout.<\/span>\r\n<span class=\"nc\">SSLPassPhraseDialog<\/span> <span class=\"n\">exec<\/span><span class=\"o\">:\/<\/span><span class=\"n\">usr<\/span><span class=\"o\">\/<\/span><span class=\"n\">libexec<\/span><span class=\"o\">\/<\/span><span class=\"n\">httpd<\/span><span class=\"o\">-<\/span><span class=\"n\">ssl<\/span><span class=\"o\">-<\/span><span class=\"n\">pass<\/span><span class=\"o\">-<\/span><span class=\"n\">dialog<\/span>\r\n\r\n<span class=\"c1\">#   Inter-Process Session Cache:<\/span>\r\n<span class=\"c1\">#   Configure the SSL Session Cache: First the mechanism <\/span>\r\n<span class=\"c1\">#   to use and second the expiring timeout (in seconds).<\/span>\r\n<span class=\"nc\">SSLSessionCache<\/span>         <span class=\"n\">shmcb<\/span><span class=\"o\">:\/<\/span><span class=\"n\">run<\/span><span class=\"o\">\/<\/span><span class=\"n\">httpd<\/span><span class=\"o\">\/<\/span><span class=\"nf\">sslcache<\/span><span class=\"p\">(<\/span><span class=\"mi\">512000<\/span><span class=\"p\">)<\/span>\r\n<span class=\"nc\">SSLSessionCacheTimeout<\/span>  <span class=\"mi\">300<\/span>\r\n\r\n<span class=\"c1\">#\r\n# Use \"SSLCryptoDevice\" to enable any supported hardware<\/span>\r\n<span class=\"c1\"># accelerators. Use \"openssl engine -v\" to list supported<\/span>\r\n<span class=\"c1\"># engine names.  NOTE: If you enable an accelerator and the<\/span>\r\n<span class=\"c1\"># server does not start, consult the error logs and ensure<\/span>\r\n<span class=\"c1\"># your accelerator is functioning properly. <\/span>\r\n<span class=\"c1\">#\r\nSSLCryptoDevice builtin<\/span>\r\n<span class=\"c1\">#SSLCryptoDevice ubsec<\/span>\r\n\r\n<span class=\"c1\">##<\/span>\r\n<span class=\"c1\">## SSL Virtual Host Context<\/span>\r\n<span class=\"c1\">##<\/span>\r\n\r\n<span class=\"o\">&lt;<\/span><span class=\"nc\">VirtualHost<\/span> <span class=\"n\">_default_<\/span><span class=\"o\">:<\/span><span class=\"mi\">443<\/span><span class=\"o\">&gt;<\/span>\r\n\r\n<span class=\"c1\"># General setup for the virtual host, inherited from global configuration<\/span>\r\n<span class=\"c1\">#DocumentRoot \"\/var\/www\/html\"<\/span>\r\n<span class=\"c1\">#ServerName www.example.com:443<\/span>\r\n\r\n<span class=\"c1\"># Use separate log files for the SSL virtual host; note that LogLevel<\/span>\r\n<span class=\"c1\"># is not inherited from httpd.conf.<\/span>\r\n<span class=\"nc\">ErrorLog<\/span> <span class=\"n\">logs<\/span><span class=\"o\">\/<\/span><span class=\"n\">ssl_error_log<\/span>\r\n<span class=\"nc\">TransferLog<\/span> <span class=\"n\">logs<\/span><span class=\"o\">\/<\/span><span class=\"n\">ssl_access_log<\/span>\r\n<span class=\"nc\">LogLevel<\/span> <span class=\"n\">warn<\/span>\r\n\r\n<span class=\"c1\">#   SSL Engine Switch:<\/span>\r\n<span class=\"c1\">#   Enable\/Disable SSL for this virtual host.<\/span>\r\n<span class=\"nc\">SSLEngine<\/span> <span class=\"n\">on<\/span>\r\n\r\n<span class=\"c1\">#   List the protocol versions which clients are allowed to connect with.<\/span>\r\n<span class=\"c1\">#   The OpenSSL system profile is used by default.  See<\/span>\r\n<span class=\"c1\">#   update-crypto-policies(8) for more details.<\/span>\r\n<span class=\"c1\">#SSLProtocol all -SSLv3<\/span>\r\n<span class=\"c1\">#SSLProxyProtocol all -SSLv3<\/span>\r\n\r\n<span class=\"c1\">#   User agents such as web browsers are not configured for the user's<\/span>\r\n<span class=\"c1\">#   own preference of either security or performance, therefore this<\/span>\r\n<span class=\"c1\">#   must be the prerogative of the web server administrator who manages<\/span>\r\n<span class=\"c1\">#   cpu load versus confidentiality, so enforce the server's cipher order.<\/span>\r\n<span class=\"nc\">SSLHonorCipherOrder<\/span> <span class=\"n\">on<\/span>\r\n\r\n<span class=\"c1\">#   SSL Cipher Suite:<\/span>\r\n<span class=\"c1\">#   List the ciphers that the client is permitted to negotiate.<\/span>\r\n<span class=\"c1\">#   See the mod_ssl documentation for a complete list.<\/span>\r\n<span class=\"c1\">#   The OpenSSL system profile is configured by default.  See<\/span>\r\n<span class=\"c1\">#   update-crypto-policies(8) for more details.<\/span>\r\n<span class=\"nc\">SSLCipherSuite<\/span> <span class=\"no\">PROFILE<\/span><span class=\"o\">=<\/span><span class=\"no\">SYSTEM<\/span>\r\n<span class=\"nc\">SSLProxyCipherSuite<\/span> <span class=\"no\">PROFILE<\/span><span class=\"o\">=<\/span><span class=\"no\">SYSTEM<\/span>\r\n\r\n<span class=\"c1\">#   Point SSLCertificateFile at a PEM encoded certificate.  If<\/span>\r\n<span class=\"c1\">#   the certificate is encrypted, then you will be prompted for a<\/span>\r\n<span class=\"c1\">#   pass phrase.  Note that restarting httpd will prompt again.  Keep<\/span>\r\n<span class=\"c1\">#   in mind that if you have both an RSA and a DSA certificate you<\/span>\r\n<span class=\"c1\">#   can configure both in parallel (to also allow the use of DSA<\/span>\r\n<span class=\"c1\">#   ciphers, etc.)<\/span>\r\n<span class=\"c1\">#   Some ECC cipher suites (http:\/\/www.ietf.org\/rfc\/rfc4492.txt)<\/span>\r\n<span class=\"c1\">#   require an ECC certificate which can also be configured in<\/span>\r\n<span class=\"c1\">#   parallel.<\/span>\r\n<span class=\"nc\">SSLCertificateFile<\/span> <span class=\"o\">\/<\/span><span class=\"n\">etc<\/span><span class=\"o\">\/<\/span><span class=\"n\">pki<\/span><span class=\"o\">\/<\/span><span class=\"n\">tls<\/span><span class=\"o\">\/<\/span><span class=\"n\">certs<\/span><span class=\"o\">\/<\/span><span class=\"n\">ca<\/span><span class=\"mf\">.<\/span><span class=\"n\">crt<\/span>\r\n\r\n<span class=\"c1\">#   Server Private Key:<\/span>\r\n<span class=\"c1\">#   If the key is not combined with the certificate, use this<\/span>\r\n<span class=\"c1\">#   directive to point at the key file.  Keep in mind that if<\/span>\r\n<span class=\"c1\">#   you've both a RSA and a DSA private key you can configure<\/span>\r\n<span class=\"c1\">#   both in parallel (to also allow the use of DSA ciphers, etc.)<\/span>\r\n<span class=\"c1\">#   ECC keys, when in use, can also be configured in parallel<\/span>\r\n<span class=\"nc\">SSLCertificateKeyFile<\/span> <span class=\"o\">\/<\/span><span class=\"n\">etc<\/span><span class=\"o\">\/<\/span><span class=\"n\">pki<\/span><span class=\"o\">\/<\/span><span class=\"n\">tls<\/span><span class=\"o\">\/<\/span><span class=\"k\">private<\/span><span class=\"o\">\/<\/span><span class=\"n\">ca<\/span><span class=\"mf\">.<\/span><span class=\"n\">key<\/span>\r\n\r\n<span class=\"c1\">#   Server Certificate Chain:<\/span>\r\n<span class=\"c1\">#   Point SSLCertificateChainFile at a file containing the<\/span>\r\n<span class=\"c1\">#   concatenation of PEM encoded CA certificates which form the<\/span>\r\n<span class=\"c1\">#   certificate chain for the server certificate. Alternatively<\/span>\r\n<span class=\"c1\">#   the referenced file can be the same as SSLCertificateFile<\/span>\r\n<span class=\"c1\">#   when the CA certificates are directly appended to the server<\/span>\r\n<span class=\"c1\">#   certificate for convenience.<\/span>\r\n<span class=\"c1\">#SSLCertificateChainFile \/etc\/pki\/tls\/certs\/server-chain.crt<\/span>\r\n\r\n<span class=\"c1\">#   Certificate Authority (CA):<\/span>\r\n<span class=\"c1\">#   Set the CA certificate verification path where to find CA<\/span>\r\n<span class=\"c1\">#   certificates for client authentication or alternatively one<\/span>\r\n<span class=\"c1\">#   huge file containing all of them (file must be PEM encoded)<\/span>\r\n<span class=\"c1\">#SSLCACertificateFile \/etc\/pki\/tls\/certs\/ca-bundle.crt<\/span>\r\n\r\n<span class=\"c1\">#   Client Authentication (Type):<\/span>\r\n<span class=\"c1\">#   Client certificate verification type and depth.  Types are<\/span>\r\n<span class=\"c1\">#   none, optional, require and optional_no_ca.  Depth is a<\/span>\r\n<span class=\"c1\">#   number which specifies how deeply to verify the certificate<\/span>\r\n<span class=\"c1\">#   issuer chain before deciding the certificate is not valid.<\/span>\r\n<span class=\"c1\">#SSLVerifyClient require<\/span>\r\n<span class=\"c1\">#SSLVerifyDepth  10<\/span>\r\n\r\n<span class=\"c1\">#   Access Control:<\/span>\r\n<span class=\"c1\">#   With SSLRequire you can do per-directory access control based<\/span>\r\n<span class=\"c1\">#   on arbitrary complex boolean expressions containing server<\/span>\r\n<span class=\"c1\">#   variable checks and other lookup directives.  The syntax is a<\/span>\r\n<span class=\"c1\">#   mixture between C and Perl.  See the mod_ssl documentation<\/span>\r\n<span class=\"c1\">#   for more details.<\/span>\r\n<span class=\"c1\">#&lt;Location \/&gt;<\/span>\r\n<span class=\"c1\">#SSLRequire (    %{SSL_CIPHER} !~ m\/^(EXP|NULL)\/ \\<\/span>\r\n<span class=\"c1\">#            and %{SSL_CLIENT_S_DN_O} eq \"Snake Oil, Ltd.\" \\<\/span>\r\n<span class=\"c1\">#            and %{SSL_CLIENT_S_DN_OU} in {\"Staff\", \"CA\", \"Dev\"} \\<\/span>\r\n<span class=\"c1\">#            and %{TIME_WDAY} &gt;= 1 and %{TIME_WDAY} &lt;= 5 \\<\/span>\r\n<span class=\"c1\">#            and %{TIME_HOUR} &gt;= 8 and %{TIME_HOUR} &lt;= 20       ) \\<\/span>\r\n<span class=\"c1\">#           or %{REMOTE_ADDR} =~ m\/^192\\.76\\.162\\.[0-9]+$\/<\/span>\r\n<span class=\"c1\">#&lt;\/Location&gt;<\/span>\r\n\r\n<span class=\"c1\">#   SSL Engine Options:<\/span>\r\n<span class=\"c1\">#   Set various options for the SSL engine.<\/span>\r\n<span class=\"c1\">#   o FakeBasicAuth:<\/span>\r\n<span class=\"c1\">#     Translate the client X.509 into a Basic Authorisation.  This means that<\/span>\r\n<span class=\"c1\">#     the standard Auth\/DBMAuth methods can be used for access control.  The<\/span>\r\n<span class=\"c1\">#     user name is the `one line' version of the client's X.509 certificate.<\/span>\r\n<span class=\"c1\">#     Note that no password is obtained from the user. Every entry in the user<\/span>\r\n<span class=\"c1\">#     file needs this password: `xxj31ZMTZzkVA'.<\/span>\r\n<span class=\"c1\">#   o ExportCertData:<\/span>\r\n<span class=\"c1\">#     This exports two additional environment variables: SSL_CLIENT_CERT and<\/span>\r\n<span class=\"c1\">#     SSL_SERVER_CERT. These contain the PEM-encoded certificates of the<\/span>\r\n<span class=\"c1\">#     server (always existing) and the client (only existing when client<\/span>\r\n<span class=\"c1\">#     authentication is used). This can be used to import the certificates<\/span>\r\n<span class=\"c1\">#     into CGI scripts.<\/span>\r\n<span class=\"c1\">#   o StdEnvVars:<\/span>\r\n<span class=\"c1\">#     This exports the standard SSL\/TLS related `SSL_*' environment variables.<\/span>\r\n<span class=\"c1\">#     Per default this exportation is switched off for performance reasons,<\/span>\r\n<span class=\"c1\">#     because the extraction step is an expensive operation and is usually<\/span>\r\n<span class=\"c1\">#     useless for serving static content. So one usually enables the<\/span>\r\n<span class=\"c1\">#     exportation for CGI and SSI requests only.<\/span>\r\n<span class=\"c1\">#   o StrictRequire:<\/span>\r\n<span class=\"c1\">#     This denies access when \"SSLRequireSSL\" or \"SSLRequire\" applied even<\/span>\r\n<span class=\"c1\">#     under a \"Satisfy any\" situation, i.e. when it applies access is denied<\/span>\r\n<span class=\"c1\">#     and no other module can change it.<\/span>\r\n<span class=\"c1\">#   o OptRenegotiate:<\/span>\r\n<span class=\"c1\">#     This enables optimized SSL connection renegotiation handling when SSL<\/span>\r\n<span class=\"c1\">#     directives are used in per-directory context. <\/span>\r\n<span class=\"c1\">#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire<\/span>\r\n<span class=\"o\">&lt;<\/span><span class=\"nc\">FilesMatch<\/span> <span class=\"s2\">\"\\.(cgi|shtml|phtml|php)$\"<\/span><span class=\"o\">&gt;<\/span>\r\n    <span class=\"nc\">SSLOptions<\/span> <span class=\"o\">+<\/span><span class=\"nc\">StdEnvVars<\/span>\r\n<span class=\"o\">&lt;\/<\/span><span class=\"nc\">FilesMatch<\/span><span class=\"o\">&gt;<\/span>\r\n<span class=\"o\">&lt;<\/span><span class=\"nc\">Directory<\/span> <span class=\"s2\">\"\/var\/www\/cgi-bin\"<\/span><span class=\"o\">&gt;<\/span>\r\n    <span class=\"nc\">SSLOptions<\/span> <span class=\"o\">+<\/span><span class=\"nc\">StdEnvVars<\/span>\r\n<span class=\"o\">&lt;\/<\/span><span class=\"nc\">Directory<\/span><span class=\"o\">&gt;<\/span>\r\n\r\n<span class=\"c1\">#   SSL Protocol Adjustments:<\/span>\r\n<span class=\"c1\">#   The safe and default but still SSL\/TLS standard compliant shutdown<\/span>\r\n<span class=\"c1\">#   approach is that mod_ssl sends the close notify alert but doesn't wait for<\/span>\r\n<span class=\"c1\">#   the close notify alert from client. When you need a different shutdown<\/span>\r\n<span class=\"c1\">#   approach you can use one of the following variables:<\/span>\r\n<span class=\"c1\">#   o ssl-unclean-shutdown:<\/span>\r\n<span class=\"c1\">#     This forces an unclean shutdown when the connection is closed, i.e. no<\/span>\r\n<span class=\"c1\">#     SSL close notify alert is sent or allowed to be received.  This violates<\/span>\r\n<span class=\"c1\">#     the SSL\/TLS standard but is needed for some brain-dead browsers. Use<\/span>\r\n<span class=\"c1\">#     this when you receive I\/O errors because of the standard approach where<\/span>\r\n<span class=\"c1\">#     mod_ssl sends the close notify alert.<\/span>\r\n<span class=\"c1\">#   o ssl-accurate-shutdown:<\/span>\r\n<span class=\"c1\">#     This forces an accurate shutdown when the connection is closed, i.e. a<\/span>\r\n<span class=\"c1\">#     SSL close notify alert is sent and mod_ssl waits for the close notify<\/span>\r\n<span class=\"c1\">#     alert of the client. This is 100% SSL\/TLS standard compliant, but in<\/span>\r\n<span class=\"c1\">#     practice often causes hanging connections with brain-dead browsers. Use<\/span>\r\n<span class=\"c1\">#     this only for browsers where you know that their SSL implementation<\/span>\r\n<span class=\"c1\">#     works correctly. <\/span>\r\n<span class=\"c1\">#   Notice: Most problems of broken clients are also related to the HTTP<\/span>\r\n<span class=\"c1\">#   keep-alive facility, so you usually additionally want to disable<\/span>\r\n<span class=\"c1\">#   keep-alive for those clients, too. Use variable \"nokeepalive\" for this.<\/span>\r\n<span class=\"c1\">#   Similarly, one has to force some clients to use HTTP\/1.0 to workaround<\/span>\r\n<span class=\"c1\">#   their broken HTTP\/1.1 implementation. Use variables \"downgrade-1.0\" and<\/span>\r\n<span class=\"c1\">#   \"force-response-1.0\" for this.<\/span>\r\n<span class=\"nc\">BrowserMatch<\/span> <span class=\"s2\">\"MSIE [2-5]\"<\/span> <span class=\"err\">\\<\/span>\r\n         <span class=\"n\">nokeepalive<\/span> <span class=\"n\">ssl<\/span><span class=\"o\">-<\/span><span class=\"n\">unclean<\/span><span class=\"o\">-<\/span><span class=\"n\">shutdown<\/span> <span class=\"err\">\\<\/span>\r\n         <span class=\"n\">downgrade<\/span><span class=\"o\">-<\/span><span class=\"mf\">1.0<\/span> <span class=\"n\">force<\/span><span class=\"o\">-<\/span><span class=\"n\">response<\/span><span class=\"o\">-<\/span><span class=\"mf\">1.0<\/span>\r\n\r\n<span class=\"c1\">#   Per-Server Logging:<\/span>\r\n<span class=\"c1\">#   The home of a custom SSL log file. Use this when you want a<\/span>\r\n<span class=\"c1\">#   compact non-error SSL logfile on a virtual host basis.<\/span>\r\n<span class=\"nc\">CustomLog<\/span> <span class=\"n\">logs<\/span><span class=\"o\">\/<\/span><span class=\"n\">ssl_request_log<\/span> <span class=\"err\">\\<\/span>\r\n          <span class=\"s2\">\"%t %h %<\/span><span class=\"si\">{<\/span><span class=\"nv\">SSL_PROTOCOL<\/span><span class=\"si\">}<\/span><span class=\"s2\">x %<\/span><span class=\"si\">{<\/span><span class=\"nv\">SSL_CIPHER<\/span><span class=\"si\">}<\/span><span class=\"s2\">x <\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">%r<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\"> %b\"<\/span>\r\n\r\n<span class=\"o\">&lt;\/<\/span><span class=\"nc\">VirtualHost<\/span><span class=\"o\">&gt;<\/span>\r\n<\/code><\/pre>\n<h2>\u91cd\u65b0\u542f\u52a8httpd<\/p>\n<pre class=\"post-pre\"><code># systemctl restart httpd\r\n<\/code><\/pre>\n<h2>\u6253\u5f00\u9632\u706b\u5899\u7684443\u7aef\u53e3\u3002\u68c0\u67e5\u670d\u52a1\u72b6\u6001\u3002<\/p>\n<pre class=\"post-pre\"><code># firewall-cmd --list-all\r\npublic (active)\r\n  target: default\r\n  icmp-block-inversion: no\r\n  interfaces: ens192\r\n  sources: \r\n  services: cockpit dhcpv6-client dns http ssh\r\n  ports: 3389\/tcp\r\n  protocols: \r\n  forward: no\r\n  masquerade: no\r\n  forward-ports: \r\n  source-ports: \r\n  icmp-blocks: \r\n  rich rules: \r\n<\/code><\/pre>\n<p>\u9ed8\u8ba4\u533a\u57df\u9a8c\u8bc1\u3002<\/p>\n<pre class=\"post-pre\"><code># firewall-cmd --get-default-zone\r\npublic\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code># firewall-cmd --add-service=https --permanent\r\nsuccess\r\n# firewall-cmd --reload &amp;&amp; firewall-cmd --list-all\r\nsuccess\r\npublic (active)\r\n  target: default\r\n  icmp-block-inversion: no\r\n  interfaces: ens192\r\n  sources: \r\n  services: cockpit dhcpv6-client dns http https ssh\r\n  ports: 3389\/tcp\r\n  protocols: \r\n  forward: no\r\n  masquerade: no\r\n  forward-ports: \r\n  source-ports: \r\n  icmp-blocks: \r\n  rich rules:\r\n<\/code><\/pre>\n<h2>\u786e\u8ba4\u901a\u4fe1<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657c237cd0c9c81e0f5c58d7\/63-0.png\" alt=\"web_Server@test.PNG\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5efa\u7acb\u7f51\u9875\u670d\u52a1\u5668 \u73af\u5883\u4fe1\u606fCentOS-8.5.2111 \u7684\u542b\u4e49\u662f\u4ec0\u4e48\uff1f \u30d1\u30c3\u30b1\u30fc\u30b8\u540d\u30d0\u30fc\u30b8\u30e7\u30f3httpd2.4 [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[227],"class_list":["post-28547","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-227"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5f9eCentOS_WebServer\u69cb\u5efa\u5230HTTPS\u9023\u63a5 - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"\u5173\u4e8e\u5f9eCentOS_WebServer\u69cb\u5efa\u5230HTTPS\u9023\u63a5\u7684\u6280\u672f\u6587\u7ae0\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5f9ecentos_webserver\u69cb\u5efa\u5230https\u9023\u63a5-2\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5f9eCentOS_WebServer\u69cb\u5efa\u5230HTTPS\u9023\u63a5\" \/>\n<meta property=\"og:description\" content=\"\u5173\u4e8e\u5f9eCentOS_WebServer\u69cb\u5efa\u5230HTTPS\u9023\u63a5\u7684\u6280\u672f\u6587\u7ae0\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5f9ecentos_webserver\u69cb\u5efa\u5230https\u9023\u63a5-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-10T19:13:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-12T00:47:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657c237cd0c9c81e0f5c58d7\/63-0.png\" \/>\n<meta name=\"author\" content=\"\u9038, \u79d1\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u9038, \u79d1\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%be%9ecentos_webserver%e6%a7%8b%e5%bb%ba%e5%88%b0https%e9%80%a3%e6%8e%a5-2\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%be%9ecentos_webserver%e6%a7%8b%e5%bb%ba%e5%88%b0https%e9%80%a3%e6%8e%a5-2\/\",\"name\":\"\u5f9eCentOS_WebServer\u69cb\u5efa\u5230HTTPS\u9023\u63a5 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2024-01-10T19:13:32+00:00\",\"dateModified\":\"2025-08-12T00:47:19+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487\"},\"description\":\"\u5173\u4e8e\u5f9eCentOS_WebServer\u69cb\u5efa\u5230HTTPS\u9023\u63a5\u7684\u6280\u672f\u6587\u7ae0\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%be%9ecentos_webserver%e6%a7%8b%e5%bb%ba%e5%88%b0https%e9%80%a3%e6%8e%a5-2\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%be%9ecentos_webserver%e6%a7%8b%e5%bb%ba%e5%88%b0https%e9%80%a3%e6%8e%a5-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%be%9ecentos_webserver%e6%a7%8b%e5%bb%ba%e5%88%b0https%e9%80%a3%e6%8e%a5-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5f9eCentOS_WebServer\u69cb\u5efa\u5230HTTPS\u9023\u63a5\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487\",\"name\":\"\u9038, \u79d1\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g\",\"caption\":\"\u9038, \u79d1\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/keyi\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%be%9ecentos_webserver%e6%a7%8b%e5%bb%ba%e5%88%b0https%e9%80%a3%e6%8e%a5-2\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5f9eCentOS_WebServer\u69cb\u5efa\u5230HTTPS\u9023\u63a5 - Blog - Silicon Cloud","description":"\u5173\u4e8e\u5f9eCentOS_WebServer\u69cb\u5efa\u5230HTTPS\u9023\u63a5\u7684\u6280\u672f\u6587\u7ae0","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u5f9ecentos_webserver\u69cb\u5efa\u5230https\u9023\u63a5-2\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5f9eCentOS_WebServer\u69cb\u5efa\u5230HTTPS\u9023\u63a5","og_description":"\u5173\u4e8e\u5f9eCentOS_WebServer\u69cb\u5efa\u5230HTTPS\u9023\u63a5\u7684\u6280\u672f\u6587\u7ae0","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5f9ecentos_webserver\u69cb\u5efa\u5230https\u9023\u63a5-2\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2024-01-10T19:13:32+00:00","article_modified_time":"2025-08-12T00:47:19+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657c237cd0c9c81e0f5c58d7\/63-0.png"}],"author":"\u9038, \u79d1","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u9038, \u79d1","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"1 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%be%9ecentos_webserver%e6%a7%8b%e5%bb%ba%e5%88%b0https%e9%80%a3%e6%8e%a5-2\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%be%9ecentos_webserver%e6%a7%8b%e5%bb%ba%e5%88%b0https%e9%80%a3%e6%8e%a5-2\/","name":"\u5f9eCentOS_WebServer\u69cb\u5efa\u5230HTTPS\u9023\u63a5 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2024-01-10T19:13:32+00:00","dateModified":"2025-08-12T00:47:19+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487"},"description":"\u5173\u4e8e\u5f9eCentOS_WebServer\u69cb\u5efa\u5230HTTPS\u9023\u63a5\u7684\u6280\u672f\u6587\u7ae0","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%be%9ecentos_webserver%e6%a7%8b%e5%bb%ba%e5%88%b0https%e9%80%a3%e6%8e%a5-2\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%be%9ecentos_webserver%e6%a7%8b%e5%bb%ba%e5%88%b0https%e9%80%a3%e6%8e%a5-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%be%9ecentos_webserver%e6%a7%8b%e5%bb%ba%e5%88%b0https%e9%80%a3%e6%8e%a5-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5f9eCentOS_WebServer\u69cb\u5efa\u5230HTTPS\u9023\u63a5"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487","name":"\u9038, \u79d1","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g","caption":"\u9038, \u79d1"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/keyi\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%be%9ecentos_webserver%e6%a7%8b%e5%bb%ba%e5%88%b0https%e9%80%a3%e6%8e%a5-2\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/28547","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=28547"}],"version-history":[{"count":3,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/28547\/revisions"}],"predecessor-version":[{"id":111347,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/28547\/revisions\/111347"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=28547"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=28547"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=28547"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}